首页 > 解决方案 > 数据框中的组合行(2行)总和没有重复

问题描述

有必要通过从每一行添加每一行(不重复的组合)并将结果写入新的数据帧来“增加”数据帧。与原始数据框相比,结果是大量的行,所以我想不使用循环,例如使用 apply 来决定。数据框例如:

1 3 6  
2 2 4  
5 1 2  
6 4 1

结果应该是:

1 3 6  
2 2 4  
5 1 2  
6 4 1  
3 5 10  
6 4 8        
7 7 7        
7 3 6   
8 6 5  
11 5 3

标签: rapply

解决方案


我们可以使用combn和生成一次取 2 的行号组合,添加一个自定义函数来添加这些行并将它们与原始数据框绑定。

rbind(df, do.call("rbind",
       combn(1:nrow(df), 2, function(x) df[x[1], ] + df[x[2], ], simplify = FALSE)))


#   V1 V2 V3
#1   1  3  6
#2   2  2  4
#3   5  1  2
#4   6  4  1
#11  3  5 10
#23  6  4  8
#32  7  7  7
#21  7  3  6
#22  8  6  5
#31 11  5  3

仅供参考,这里的关键部分是

combn(1:nrow(df), 2) #which gives
#     [,1] [,2] [,3] [,4] [,5] [,6]
#[1,]    1    1    1    2    2    3
#[2,]    2    3    4    3    4    4

并且此输入用于从原始数据框中子集行。


推荐阅读