我的数据框中有一列,每个单元格中都有一个或多个数字。如果有很多数字,它们会分隔一个空格。此外,R将它们视为字符向量。我真的很想将它们转换成数字(如果可能的话,马上把它们加起来)。 例如。我的一个单元格可能看起来像
6 310 21 20 64
我试过
Reduce(sum,L)
和
as.numeric(L)
但我总是得到 警告信息:
强制引入的NAs
这里,L只是我创建的一个样本对象,用于放置我的一个单元格。
答案 0 :(得分:5)
以下是另外两个可在矢量上正常工作的选项(似乎)
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
答案 1 :(得分:4)
我们可以使用scan
sum(scan(text=str1, what=numeric(), quiet=TRUE))
#[1] 421
str1 <- "6 310 21 20 64"
答案 2 :(得分:3)
根据我的评论,这是使用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)))
得到改善。