我正在尝试对我目前拥有的数据集做两件事:
ID IV1 DV1 DV2 DV3 DV4 DV5 DV6 DV7
1 97330 3 0 0 0 0 0 1 0
2 118619 0 0 0 0 0 1 1 0
3 101623 2 0 0 0 0 0 0 0
4 202626 0 0 0 0 0 0 0 0
5 182925 1 1 0 0 0 0 0 0
6 179278 1 0 0 0 0 0 0 0
我已经能够使用以下内容确定唯一列组合的数量:
uniq <- unique(dat[,c('DV1','DV2','DV3','DV4','DV5','DV6','DV7')])
这表明数据集中存在101个唯一组合。我没有能够弄清楚的是如何确定如何对变量求和&#34; IV1&#34;由每个独特的小组。我一直在这个网站上阅读,我相当肯定有一个简单明了的答案,但到目前为止它还没找到我。
注意:我基本上试图找到一个R解决方案来执行&#34;联合分析&#34;显示在this paper中。本文末尾有SPSS,SAS和STATA的示例代码。
答案 0 :(得分:3)
library(dplyr)
group_by(dat, DV1, DV2, DV3, DV4, DV5, DV6, DV7) %>%
summarize(sumIV1 = sum(IV1))
结果中的行数是数据中存在的唯一组合的数量。当然,sumIV1
列的分组总和为IV1
。
感谢Frank在评论中,我们可以使用group_by_
字符串来简化:
group_by_(dat, .dots = paste0("DV", 1:7)) %>%
summarize(sumIV1 = sum(IV1))
答案 1 :(得分:1)
这是一个可重复的例子:
library(data.table)
DT <- data.table(X = c(1, 1, 1 , 1), Y = c(2, 2 , 3 , 4), Z = c(1,1,3,1))
其中X,Y ......是你的专栏。
然后使用Reduce
函数:
DT[, join_grp := Reduce(paste,list(X,Y,Z))]
这给出了:
DT
X Y Z join_grp
1: 1 2 1 1 2 1
2: 1 2 1 1 2 1
3: 1 3 3 1 3 3
4: 1 4 1 1 4 1
我们可以找到:
unique(DT[, join_grp])
[1] "1 2 1" "1 3 3" "1 4 1"
总和:
DT[ , sum(X), by = join_grp]
只需将您想要的任何列添加到X
简明解决方案
DT[, join_grp := Reduce(paste,list(X,Y,Z))][ , sum(X), by = join_grp]
或
DT[ , sum(X), by = list(Reduce(paste,list(X,Y,Z)))]