【问题标题】:Reading text file containing numerical values in R读取包含R中数值的文本文件
【发布时间】:2015-01-21 13:58:49
【问题描述】:

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

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。我已经尝试了一切......例如,使用 @987654324 @ 值没有重新分配,但这些实际上是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 

【问题讨论】:

  • parmData &lt;- read.table("ParameterData.txt”, na.strings = 'VAL')

标签: r input dataframe


【解决方案1】:

您不能在同一列中包含字符和数字。您也无法将因子直接转换为数字并获得正确的值。因子存储为整数值,可能与您拥有的值不同。我们必须先转换为字符,然后再转换为数字。

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 '

【讨论】:

  • 我确实需要以某种方式输入此字符参数。所以,你是说我应该为这个字符参数有一个单独的数据文件?
  • 不,我是说如果所有非值都是VAL,那么您可以使用上面的read.table 调用重新读取文件,它会将它们全部转换为NA
  • 好的。我想我把水弄混了。我编辑了我的帖子以准确显示输入文件在磁盘上的样子。我相信,除非我使用 read.table,否则我不能使用 cmets。但是,它们不是必需的。
  • @Ernie - 我已经根据您的输入文件为我的答案添加了一种可能的方法
  • 完美!谢谢,理查德。
猜你喜欢
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 2016-10-05
  • 1970-01-01
  • 2019-10-28
  • 2021-01-09
相关资源
最近更新 更多