我有一个 Dataframe ,其中包含几个具有二进制yes/no条件的变量(在我的示例中为23个),我正在尝试识别变量对的组合
df <- tibble(V1 = sample(c(0,1), 25, replace=TRUE, prob=c(0.6, 0.4)),
V2 = sample(c(0,1), 25, replace=TRUE, prob=c(0.6, 0.4)),
V3 = sample(c(0,1), 25, replace=TRUE, prob=c(0.8, 0.2)),
V4 = sample(c(0,1), 25, replace=TRUE, prob=c(0.7, 0.3)),
V5 = sample(c(0,1), 25, replace=TRUE, prob=c(0.8, 0.2)),
V6 = sample(c(0,1), 25, replace=TRUE, prob=c(0.8, 0.2)),
V7 = sample(c(0,1), 25, replace=TRUE, prob=c(0.8, 0.2)))
如果我想标识 Dataframe 中的每个唯一组,我将使用cur_group_id(),如下所示:
df %>% group_by(across(everything())) %>%
mutate(combo_id = cur_group_id())
但我实际上想要识别“是”条件的“对”组合,例如,我想要识别V1 == 1 & V2 == 1的情况,忽略任何其他列包含的内容。
所以基本上我想这么做:
df %>%
mutate(combo_id = case_when(V1 == 1 & V2 == 1 ~ "V1_V2"))
但我希望能够将此应用于 Dataframe 中所有变量的每种可能的2变量组合。
也许这是map()的工作?我被卡住了。
2条答案
按热度按时间dohp0rv51#
我们可以使用
combn
或者使用
tidyverse
b1zrtrql2#
下面是一种方法,我将数据设置为长数据,将其连接到自身以匹配列之间的匹配,然后将其调整为宽数据。
结果