读取包含R中数值的文本文件

时间:2014-11-23 22:08:58

标签: r input dataframe

我知道有关于这个主题的帖子,但到目前为止我所阅读和尝试的内容似乎都没有用。这应该很简单,但显然不是。我有一个包含字符和文本的参数文件。当我读到它时:

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.我已经尝试了所有...例如,使用{{ 1}}没有重新分配的值,但这些值实际上是parmData,并且因素在我正在使用的某些方法中不起作用。

当然这很容易,我对某些事情视而不见。我希望将数值视为数字和字符值作为字符处理。我该怎么做?

以下是数据文件的样子:

factors

1 个答案:

答案 0 :(得分: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" 

text = txt将替换为您的文件名。如果要转换为数字,请在该向量上使用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 '