R中对的唯一组合的总和

时间:2016-04-04 02:05:01

标签: r

我有data.frame

tmp <- data.frame(C1=c(1,1,2),C2=c(2,3,3), CS=c(5,7,9))
> tmp
  C1 C2 CS
1 1  2  5
2 1  3  7
3 2  3  9

我需要计算data.frame对的所有唯一组合的总和,其中C1C2定义对的组合,CS定义两个术语总和。通常情况下,nrow(tmp)等于n

第一个组合,常用数字 1 :( 1 和2)和( 1 和3)给出5 + 7 = 12 。

第二个组合,常用数字 2 :( 1和 2 )和( 2 和3)给出5 + 9 = 14

第3组合,常用数字 3 :( 1和 3 )和(2和 3 )给出7 + 9 = 16

预期结果是向量(12,14,16)。

有人会想知道如何组织所有独特组合的完整半身像吗?

3 个答案:

答案 0 :(得分:3)

通过docker createstack然后meltaggregatetapplydplyr制作一个长数据集,按组求和。基础R的一次尝试:

data.table

答案 1 :(得分:1)

我真的不确定为什么要这样做。必须有更好的方法来存储这些数据。总之...

library(dplyr)

## create an accumulating list
output <- list()

## for each 'common number', find the rows (slice) for which that number
## is either in the first or second column, then sum the value of 
## CS in those columns.
for (pairNo in 1:3) {
  output[[pairNo]] <- tmp %>% 
    slice(which(pairNo== C1 | pairNo== C2)) %>% 
    summarise(pairNo=pairNo, result=sum(CS))
}

## > output
## [[1]]
## pairNo result
## 1      1     12
## 
## [[2]]
## pairNo result
## 1      2     14
## 
## [[3]]
## pairNo result
## 1      3     16

该列表的清洁输出取决于您。

答案 2 :(得分:1)

不一定更好,但可能比我的其他答案更清洁;

library(dplyr)
library(tidyr)
tmp %>% 
  gather(CS, "common") %>% 
  data.frame %>% ## avoids the duplicated name from a simple gather
  select(-CS.1) %>% 
  group_by(common) %>% 
  summarise(sum(CS))

##   common sum(CS)
## 1      1      12
## 2      2      14
## 3      3      16