R中对的唯一组合之和

R中对的唯一组合之和,r,R,我有数据框: 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 tmp-tmp C1 C2 CS 1 1 2 5 2 1 3 7 3 2 3 9 我需要从数据框计算对的所有唯一组合的和,其中C1和C2定义对的组合,CS为和定义了两个术语。通常情况下,nrow(tmp)等于n 第一个组合,常用数字是1:(1和2)和(

我有
数据框

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
tmp-tmp
C1 C2 CS
1 1  2  5
2 1  3  7
3 2  3  9
我需要从
数据框
计算对的所有唯一组合的和,其中
C1
C2
定义对的组合,
CS
为和定义了两个术语。通常情况下,
nrow(tmp)
等于
n

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

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

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

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


有人能给出一个如何组织所有独特组合的完整半身像的想法吗

通过
stack
melt
制作一个长数据集,然后
aggregate
tapply
dplyr
数据。表
按组求和。在base R中尝试一次:

long <- cbind(tmp["CS"], stack(tmp[c("C1","C2")]))
long

#  CS values ind
#1  5      1  C1
#2  7      1  C1
#3  9      2  C1
#4  5      2  C2
#5  7      3  C2
#6  9      3  C2

with( long, tapply(CS, values, sum) )
# 1  2  3 
#12 14 16 

long我真的不知道为什么会有人想做这样的事情。必须有更好的方法来存储这些数据。无论如何

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
库(dplyr)
##创建一个累积列表
产量%
总结(pairNo=pairNo,result=总和(CS))
}
##>输出
## [[1]]
##派诺结果
## 1      1     12
## 
## [[2]]
##派诺结果
## 1      2     14
## 
## [[3]]
##派诺结果
## 1      3     16

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

不一定更好,但可能比我的另一个答案更清晰

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