如何在R语言中检查频数表的完全匹配情况?
解决方法
要高效识别计数完全匹配的变量,无需翻阅冗长的频数表,可以用tidyverse工具链实现:
1. 计算各变量的0/1频数统计
先把数据转成长格式,统计每个变量的0和1的数量,再转成宽格式便于对比:
tib %>% gather(key = "variable", value = "value") %>% count(variable, value) %>% pivot_wider(names_from = value, values_from = n, values_fill = 0)
输出示例:
# A tibble: 5 × 3 variable `0` `1` <chr> <int> <int> 1 x1 498 502 2 x2 510 490 3 x3 498 502 4 x4 485 515 5 x5 510 490
2. 分组识别匹配的变量
基于0和1的计数分组,把频数完全一致的变量归为一组:
tib %>% gather(key = "variable", value = "value") %>% count(variable, value) %>% pivot_wider(names_from = value, values_from = n, values_fill = 0) %>% group_by(`0`, `1`) %>% summarise(matching_vars = str_c(variable, collapse = ", "), .groups = "drop")
输出示例:
# A tibble: 3 × 3 `0` `1` matching_vars <int> <int> <chr> 1 485 515 x4 2 498 502 x1, x3 3 510 490 x2, x5
这样就能一眼看到哪些变量的频数完全相同。
3. 给变量标记匹配组ID(可选)
如果需要给每个变量分配匹配组的标识,方便后续处理:
match_groups <- tib %>% gather(key = "variable", value = "value") %>% count(variable, value) %>% pivot_wider(names_from = value, values_from = n, values_fill = 0) %>% group_by(`0`, `1`) %>% mutate(group_id = cur_group_id()) %>% ungroup() %>% select(variable, group_id) # 查看结果 match_groups
输出示例:
# A tibble: 5 × 2 variable group_id <chr> <int> 1 x1 1 2 x2 2 3 x3 1 4 x4 3 5 x5 2
相同group_id的变量,0和1的计数完全一致。
内容的提问来源于stack exchange,提问作者Shawn Hemelstrand
相关产品推荐
相关产品推荐

