【发布时间】:2021-08-19 00:00:15
【问题描述】:
我有一系列 14 个布尔变量,我想找出 3 个或更多变量的前 3 个组合(其中值 == 1)。
样本数据:
df <- data.frame(ID = c(1, 2, 3, 4, 5, 6, 7, 8),
var1 = c(0, 0, 1, 1, 1, 0, 0, 1),
var2 = c(1, 0, 0, 1, 1, 1, 1, 0),
var3 = c(0, 0, 1, 1, 1, 1, 0, 0),
var4 = c(1, 1, 1, 1, 1, 0, 1, 1),
var5 = c(0, 0, 0, 1, 1, 0, 1, 1)
)
df
> df
ID var1 var2 var3 var4 var5
1 1 0 1 0 1 0
2 2 0 0 0 1 0
3 3 1 0 1 1 0
4 4 1 1 1 1 1
5 5 1 1 1 1 1
6 6 0 1 1 0 0
7 7 0 1 0 1 1
8 8 1 0 0 1 1
我找到了一个解决方案,可以将所有列名放在一起,每次唯一出现:
# Bring to long format
df_long <- df %>%
melt(id.vars = "ID")
# Collapse the variables that have a '1' together per row
df_combo <- ddply(df_long, "ID", summarize,
combos = paste(variable[value == 1], collapse = "/"))
> df_combo
ID combos
1 1 var2/var4
2 2 var4
3 3 var1/var3/var4
4 4 var1/var2/var3/var4/var5
5 5 var1/var2/var3/var4/var5
6 6 var2/var3
7 7 var2/var4/var5
8 8 var1/var4/var5
如果我只想计算唯一组合,这很好,但我想知道 3 个或更多变量的每个组合出现的次数,即使在其他变量也出现的情况下也是如此。在上面的示例中,组合 (var1/var4/var5) 出现了 3 次,但在其他两个变量旁边出现了两次。
必须有一种简单的方法来提取这些信息,只是想不到。谢谢你的帮助!!
【问题讨论】:
标签: r