如何将两个含不同类别的数据框转换为类别列格式的计数表?
解决方案代码
先模拟你的数据场景,方便对应实际数据:
library(dplyr) library(tidyr) # 模拟y_t2(来自DF1,含A、B类别计数) y_t2 <- tibble(category = c("A", "B"), count = c(10, 15)) # 模拟y_t3(来自DF2,无A、B,只有C、D类别计数) y_t3 <- tibble(category = c("C", "D"), count = c(8, 12))
按需求转换为目标计数表:
# 1. 给每个数据框添加来源标识 y_t2 <- y_t2 %>% mutate(source = "DF1") y_t3 <- y_t3 %>% mutate(source = "DF2") # 2. 合并数据框,补全所有可能的类别,缺失计数填0 combined <- bind_rows(y_t2, y_t3) %>% complete(source, category, fill = list(count = 0)) # 3. 转换为宽表:类别为列,来源为行 count_table <- combined %>% pivot_wider(names_from = category, values_from = count) # 查看结果 count_table
运行后会得到如下结果:
# A tibble: 2 × 5 source A B C D <chr> <dbl> <dbl> <dbl> <dbl> 1 DF1 10 15 0 0 2 DF2 0 0 8 12
如果你的y_t2/y_t3还没统计好类别计数,是原始数据,可以提前加统计步骤:
# 从DF1生成带标识的计数表y_t2 y_t2 <- DF1 %>% count(category) %>% mutate(source = "DF1") # DF2同理生成y_t3 y_t3 <- DF2 %>% count(category) %>% mutate(source = "DF2")
核心是用complete补全所有来源-类别组合,再转宽表,解决rbind后缺失类别无数据的问题。
内容的提问来源于stack exchange,提问作者PhD Student
相关产品推荐
相关产品推荐

