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