使用 R 读取 csv 文件中的分数

Reading fractions in csv file with R

我有一个数值数据的文本文件,headers,其中一些数字以分数形式输入,一些以整数形式输入,一些以浮点数形式输入,例如:

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

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

谢谢...

我强烈建议在 "data.table" 包中使用 fread() 。它在几乎所有情况下都非常快速且非常强大。

input.file <- fread("file_name.csv")

如果您的值仍然不是您要查找的格式,您可以使用 "as.integer()" 或 "as.numeric()":

input.file$`Column Name To Change` <- as.numeric(input.file$`Column Name To Change`)

希望对您有所帮助!

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

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

一旦您将数据存储在字符向量中,我们就可以使用 eval(parse()) 来评估表达式,就好像它们是在控制台中输入的一样。不幸的是 eval 没有向量化,所以我们将它包装在 sapply 中,依次将此函数应用于数据的每个元素

answer = sapply(dat, function(x) eval(parse(text = x)))

我们可以通过一次对每一列应用上述方法来扩展它来处理多行数据。比如像这样

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