使用 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
我有一个数值数据的文本文件,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