【问题标题】:Identifying combinations of binary variables in tidyverse识别 tidyverse 中二进制变量的组合
【发布时间】:2023-01-24 13:47:11
【问题描述】:

我有一个包含多个变量(在我的示例中为 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)))

如果我想识别数据框中的每个唯一组,我会像这样使用 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"))

但我希望能够将其应用于数据框中所有变量的所有可能的 2 个变量组合。

也许这是 map() 的工作?我卡住了。

【问题讨论】:

    标签: r dplyr pmap


    【解决方案1】:

    我们可以使用combn

    out <- combn(names(df), 2, FUN = (x)
       case_when(rowSums(df[x]) == 2 ~ paste(x, collapse = "_")))
    
    colnames(out) <- paste0("combo_id_", combn(names(df), 2, 
        FUN = paste, collapse = "_"))
    df2 <- cbind(df, out)
    

    -输出

    > head(df2, 2)
      V1 V2 V3 V4 V5 V6 V7 combo_id_V1_V2 combo_id_V1_V3 combo_id_V1_V4 combo_id_V1_V5 combo_id_V1_V6 combo_id_V1_V7 combo_id_V2_V3
    1  1  0  0  1  1  0  1           <NA>           <NA>          V1_V4          V1_V5           <NA>          V1_V7           <NA>
    2  1  0  0  1  0  0  0           <NA>           <NA>          V1_V4           <NA>           <NA>           <NA>           <NA>
      combo_id_V2_V4 combo_id_V2_V5 combo_id_V2_V6 combo_id_V2_V7 combo_id_V3_V4 combo_id_V3_V5 combo_id_V3_V6 combo_id_V3_V7
    1           <NA>           <NA>           <NA>           <NA>           <NA>           <NA>           <NA>           <NA>
    2           <NA>           <NA>           <NA>           <NA>           <NA>           <NA>           <NA>           <NA>
      combo_id_V4_V5 combo_id_V4_V6 combo_id_V4_V7 combo_id_V5_V6 combo_id_V5_V7 combo_id_V6_V7
    1          V4_V5           <NA>          V4_V7           <NA>          V5_V7           <NA>
    2           <NA>           <NA>           <NA>           <NA>           <NA>           <NA>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      相关资源
      最近更新 更多