R语言中如何对数据框的非相邻行求和并添加至数据框?
解决方法:对数据框指定行求和并添加至末尾
别担心,这种小问题很常见,我帮你理清楚解决方案!
先从你的示例数据说起
首先构造你给出的示例数据框:
exampleframe <- data.frame( X1 = c(1,5,2), X2 = c(12,4,19), X3 = c(4,11,21), X4 = c(6,2,2) )
要实现第1行和第3行求和并添加到末尾,只需要两步:
- 直接对目标行做元素级相加,得到新行
- 用
rbind()把新行追加到数据框末尾
代码如下:
# 计算第1行和第3行的和,生成新行 new_row <- exampleframe[1, ] + exampleframe[3, ] # 将新行添加到数据框最后 exampleframe <- rbind(exampleframe, new_row)
运行后就能得到你想要的结果:
X1 X2 X3 X4 1 1 12 4 6 2 5 4 11 2 3 2 19 21 2 4 3 31 25 8
适配你的真实数据(19行66列)
针对你真实的exampleframe1数据框,只需要把行索引换成你需要的16和19就行:
# 计算第16行和第19行的和 new_row_real <- exampleframe1[16, ] + exampleframe1[19, ] # 追加到数据框末尾 exampleframe1 <- rbind(exampleframe1, new_row_real)
分析你之前尝试的问题
- 第一种方法
exampleframe1[20,] <- rbind(exampleframe1[19,] + exampleframe1[16,]):rbind()在这里是多余的,相加后的结果已经是一行数据,不需要再用rbind包装,反而会导致结构错误。 - 第二种方法
rowsum(exampleframe1[19,], exampleframe1[16,]):rowsum()的作用是按分组变量对行求和,第二个参数应该是分组标识(比如一个向量),不是另一行数据,所以用错了函数。 - 第三种方法
exampleframe1[20,] <- exampleframe1[19,] + exampleframe1[16,]:理论上这个逻辑是对的,如果没生效,大概率是你的数据框里有因子类型的列(不是数值型),导致无法直接相加。可以先检查列类型:
如果有因子列,先转换成数值型再操作:# 查看每列的类型 sapply(exampleframe1, class)
之后再执行相加和追加操作就没问题了。# 将因子列转为数值型 exampleframe1 <- lapply(exampleframe1, function(x) { if(is.factor(x)) as.numeric(as.character(x)) else x }) %>% data.frame()
内容的提问来源于stack exchange,提问作者NiGS
相关产品推荐
相关产品推荐

