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