2014-11-23 91 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