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)))
中可以改进。
我的数据框中有一列,其中每个单元格中都有一个或多个数字。如果有很多数字,则用 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)))
中可以改进。