数据帧中组合行(2行)的总和,无重复

时间:2018-12-08 15:00:37

标签: r 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

1 个答案:

答案 0 :(得分:3)

我们可以使用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

此输入用于子集原始数据帧中的行。