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

时间:2015-12-01 08:59:46

标签: r vector character numeric

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

6 310 21 20 64

我试过

Reduce(sum,L)

as.numeric(L)

但我总是得到 警告信息:

  

强制引入的NAs

这里,L只是我创建的一个样本对象,用于放置我的一个单元格。

3 个答案:

答案 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)))得到改善。