R:我的数据框有 2 列,每行都有一串数字,有没有办法拆分字符串并添加每列的值?

标签 r string for-loop strsplit

在我的 R 数据框中,我有两列(A 和 B)。

在 A 列和 B 列的每一行中,都有一个用逗号分隔的数字字符串。

Row 1, Column A - 1,2,3,4      
Row 1, Column B - 5,6,7,8

我想添加值并创建另一个 C 列,以便输出如下所示:

Row 1, Column C - 6,8,10,12

由于我有多行,我尝试编写一个 for 循环

我的代码是:

library(stringr)
for i in 1:nrow(dataset)
row_i = dataset[i, ]
A1 = str_split(row_i$A, ",")
B1 = str_split(row_i$B, ",")
unlist(A1)
unlist(B1)
as.numeric(A1)
as.numeric(B2)
dataset$C  = A1+B2
end  

我收到以下错误 withCallingHandlers(expr, warning = function(w) invokeRestart("muffleWarning")) 中的错误: (list) 对象不能被强制输入'double'

最佳答案

这里有几种方法。

这使用了 SOfun 中的函数 list_reduction .

df <- data.frame(A = c("1,2,3,4", "9,10,11,12,13"),
                 B = c("5,6,7,8", "14,15,16,17,18"))
                 
## Grab `list_reduction` from "SOfun"
source("https://raw.githubusercontent.com/mrdwab/SOfun/master/R/list_reduction.R")

## Split the list
df_list <- lapply(df, function(x) type.convert(strsplit(as.character(x), ",", fixed = TRUE)))
df["C"] <- list_reduction(df_list, "+", flatten = TRUE)
df
#               A              B                  C
# 1       1,2,3,4        5,6,7,8       6, 8, 10, 12
# 2 9,10,11,12,13 14,15,16,17,18 23, 25, 27, 29, 31

这使用“splitstackshape”中的cSplit:

library(splitstackshape)
library(data.table)
cSplit(as.data.table(df, keep.rownames=TRUE), c("A", "B"), ",", "long")[
  , C := A + B][, lapply(.SD, toString), "rn"]
#    rn                 A                  B                  C
# 1:  1        1, 2, 3, 4         5, 6, 7, 8       6, 8, 10, 12
# 2:  2 9, 10, 11, 12, 13 14, 15, 16, 17, 18 23, 25, 27, 29, 31

关于R:我的数据框有 2 列,每行都有一串数字,有没有办法拆分字符串并添加每列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62493993/

相关文章:

c - 为什么这个代码在 Big Oh 表示法中被认为是 O(N^6)?

r - 如何从 R 中使用 `freq` 函数生成的表中排除累积和总比例?

r - 在 R 中向量化使用唯一函数的 for 循环

Java Map,如何正确将UTF-8字符串放入 map ?

java - 将文件中的句子存储到java字符串中

C代码;带输入的嵌套 do while 循环

java - 为什么使用增强的 for 循环来实现冒泡排序会给我 ArrayIndexOutOfBoundsException?

r - 使用递增变量循环并改变多个列

R data.table 用户定义函数

java - 检查字符串是否为长度为 1 到 5 的字母数字