如何基于多列对R语言数据框分类并生成交叉统计表格
要生成你需要的这种交叉表格式(行是V2的等级,列是V3的类别,标记每个组合是否存在),可以用dplyr搭配tidyr的pivot_wider来实现,具体代码如下:
library(dplyr) library(tidyr) # 处理数据生成目标格式 df %>% group_by(V2, V3) %>% summarise(present = 1, .groups = "drop") %>% # 标记每个V2-V3组合存在 pivot_wider( names_from = V3, values_from = present, values_fill = "" # 不存在的组合留空 )
运行后会得到类似这样的输出:
# A tibble: 5 × 5 V2 amira boro car dim <fct> <chr> <chr> <chr> <chr> 1 Level ii "" "" "1" "" 2 Level iia "1" "" "1" "1" 3 Level iib "1" "1" "1" "" 4 Level iiia "" "" "1" "" 5 Level iiic "1" "1" "" ""
步骤说明:
- 分组标记存在性:用
group_by(V2, V3)按两个列分组,然后summarise(present = 1)给每个存在的组合打上标记(如果需要统计实际出现次数,把1换成n()即可)。 - 转宽格式:
pivot_wider把V3的各个类别(amira/boro/car/dim)转成列,用present的值填充单元格,不存在的组合用空字符串填充,和你想要的格式匹配。
如果你希望单元格显示实际出现次数而非存在标记,只需要调整summarise部分:
df %>% group_by(V2, V3) %>% summarise(count = n(), .groups = "drop") %>% pivot_wider(names_from = V3, values_from = count, values_fill = 0)
内容的提问来源于stack exchange,提问作者nik
相关产品推荐
相关产品推荐

