R:将数字列表从字符转换为数字

R: convert list of numbers from character to numeric

我的数据框中有一列,其中每个单元格中都有一个或多个数字。如果有很多数字,则用 space 分隔。此外,R 将它们视为字符向量。我真的很想将它们转换为数字(如果可能的话,马上把它们加起来)。 例如。我的一个细胞可能看起来像

6 310 21 20 64

我试过了

Reduce(sum,L)

as.numeric(L)

但我总是得到 警告信息:

NAs introduced by coercion

在这里,L 只是我创建的一个示例对象,用于将我的一个单元格放入其中。

我们可以使用scan

sum(scan(text=str1, what=numeric(), quiet=TRUE))
#[1] 421

数据

str1 <- "6 310 21 20 64"

这里还有两个选项可以在矢量上正常工作(看起来)

str1 <- c("6 310 21 20 64", "6 310 21 20 64","6 310 21 20 64")
rowSums(read.table(text = str1))
## [1] 421 421 421

或使用data.table::fread

rowSums(data.table::fread(paste(str1, collapse = "\n")))
# [1] 421 421 421        

或者如@akrun 评论中所述,在这两种情况下您都可以使用 Reduce(`+`,...) 而不是 rowSums(...) 以避免 marix 转换

根据我的评论,这是一个使用 sapply 的解决方案:

sum(as.numeric(strsplit("6 310 21 20 64",' ')[[1]]))

数据框的列将给出如下内容:

sapply(1:nrow(df),function(x){sum(as.numeric(strsplit(str1,' ')[[x]]))})
# 421 421 421

由于 David Arenburg 的建议,在 sapply(strsplit(str1,' '), function(x) sum(type.convert(x))) 中可以改进。