用R读取csv文件中的分数

Ben*_* S. 8 csv r fractions

我有一个带有标题的数字数据的文本文件,其中一些数字作为分数输入,一些作为整数输入,一些作为浮点输入,例如:

col1name, col2name, col3name, col4name    
1, 2, 3, 4
0.5, 0.6, 0.7, 0.8
1/2, 2/3, 3/4, 4/5
1, 0.2, 3/3, 4
Run Code Online (Sandbox Code Playgroud)

当我使用read.csv时,如何评估这些表达式并将其存储为数字?

谢谢...

dww*_*dww 7

首先,将数据导入为字符串向量.在问题中使用您的玩具示例我们可以通过

txt = "1, 2, 3, 0.3, 2/5, 0.75, 1/3"
dat = read.table(text = txt, sep = ",", stringsAsFactors = F)
Run Code Online (Sandbox Code Playgroud)

一旦你有一个特征向量数据,我们可以使用eval(parse())评估,就好像它们在控制台中键入的表达式.遗憾的eval是没有矢量化,所以我们将它包装成sapply,以便依次将此函数应用于数据的每个元素

answer = sapply(dat, function(x) eval(parse(text = x)))
Run Code Online (Sandbox Code Playgroud)

我们可以通过一次将上述方法应用于每列来扩展它以处理多行数据.例如,像这样

txt = "col1name, col2name, col3name, col4name
1, 2, 3, 4
0.5, 0.6, 0.7, 0.8
1/2, 2/3, 3/4, 4/5
1, 0.2, 3/3, 4"

dat = read.table(text = txt, sep = ",", stringsAsFactors = F, header = T)
answer = apply(dat, 2, function(this.col) sapply(this.col, function(x) eval(parse(text = x))))
#      col1name  col2name col3name col4name
# [1,]      1.0 2.0000000     3.00      4.0
# [2,]      0.5 0.6000000     0.70      0.8
# [3,]      0.5 0.6666667     0.75      0.8
# [4,]      1.0 0.2000000     1.00      4.0
Run Code Online (Sandbox Code Playgroud)