2014-11-23 61 views
0

我知道這個主題有帖子,但是我迄今爲止沒有閱讀和嘗試的東西似乎工作。這應該很簡單,但它顯然不是。我有一個包含字符和文本的參數文件。當我讀到它:讀取包含R中的數值的文本文件

parmData <- read.table("ParameterData.txt」) 

和我打印的值到屏幕我得到以下幀。框架中的每個對象顯然都是一個因素。

 V1 
1 10 
2  5 
3  8 
4 0.3 
5 0.5 
6 VAL 

我第一次嘗試加載到這些單獨標記的變量,如:

var1 <- as.numeric(parmData[1,1]) ## with as.character used for the VAL value 

一切順利直到我得到的實數等0.3,0.5等,以數字轉換轉換這些值整數... 3和5.我試過所有的東西......例如,使用parmData值而不重新分配,但實際上這些值是factors,並且因素在某些我使用的方法中不起作用。

當然,這很容易,我對某些事情是盲目的。我想將數字值視爲數字和字符值視爲字符。我該怎麼做呢?

下面是數據文件的樣子:

10 ## lookback days 
5 ## lookback days 
8 ## Volatility lookback days 
0.3 ## weighting 1 
0.5 ## weighting 2 
0.2 ## Volatility weighting 
8 ## averaging period 1 
10 ## averaging period 2 
12 ## averaging period 3 
"SHY" ## cutoff asset 
0.03 ## no-risk percentage (decimal) 
0.3 ## maximum amount allowed (decimal) 
5 ## lookback days for correlation 
5 ## lookback days covariance 
+1

'parmData < - 函數read.table(「ParameterData.txt」,na.strings = 'VAL')' – rawr 2014-11-23 22:19:59

回答

2

你不能在同一列字符和數字。您也無法將因子直接轉換爲數字並獲得正確的值。因素存儲爲整數值,可能與您擁有的值不同。我們必須首先轉換爲字符,然後轉換爲數字。

VAL必須是NA,否則整列必須是字符。對於數字:

suppressWarnings(with(df, as.numeric(levels(V1)[V1]))) 
#[1] 10.0 5.0 8.0 0.3 0.5 NA 

而對於角色只是從上面刪除as.numeric調用。如果需要,您也可以刪除suppressWarnings電話。它只是警告我們關於NA值的介紹。


更新:根據您的編輯,我會用scan與它的許多論點。

scan(text = txt, what = character(), quote = "\"", sep = "\n", 
    comment.char = "#", strip.white = TRUE, quiet = TRUE) 
# [1] "10" "5" "8" "0.3" "0.5" "0.2" "8" "10" "12" "SHY" 
# [11] "0.03" "0.3" "5" "5" 

其中​​將被替換爲您的文件名。然後在該向量上使用as.numeric,如果要轉換爲數字。

txt <- '10 ## lookback days 
5 ## lookback days 
8 ## Volatility lookback days 
0.3 ## weighting 1 
0.5 ## weighting 2 
0.2 ## Volatility weighting 
8 ## averaging period 1 
10 ## averaging period 2 
12 ## averaging period 3 
"SHY" ## cutoff asset 
0.03 ## no-risk percentage (decimal) 
0.3 ## maximum amount allowed (decimal) 
5 ## lookback days for correlation 
5 ## lookback days covariance ' 
+0

我需要以某種方式輸入該字符參數所以,你說我應該有一個獨立的。這個字符參數的數據文件? – Ernie 2014-11-23 22:53:46

+0

不,我要說的是,如果所有的非值都是'VAL',那麼你可以用上面的'read.table'調用重新讀取文件,它會將它們全部轉換到NA – 2014-11-23 22:55:14

+0

好吧,我想我是在混水,我編輯了我的帖子,準確地顯示了輸入文件在磁盤上的樣子,除非我使用read.table,否則我不能使用這些註釋,但我相信, – Ernie 2014-11-23 23:04:52

相關問題