如何折叠频数表的行并在新列中汇总其计数?
嘿,我来帮你解决这个折叠频数表并汇总计数的问题!从你给出的DataFrame结构来看,核心需求应该是按家庭(Family)聚合,把不同角色/类型的样本数量汇总成单独的列对吧?下面用R里的dplyr和tidyr包给你演示两种实用的实现方式:
准备工作
首先确保你已经安装并加载了所需的包:
install.packages(c("dplyr", "tidyr")) # 如果没安装的话先运行这个 library(dplyr) library(tidyr)
方法1:按角色(Role)汇总计数并折叠行
这个方法会把每个家庭里不同角色(Father、Mother、Proband、Sibling)的样本数量,分别放到单独的列中:
# 第一步:按家庭和角色分组,统计每组的样本数 role_count <- df %>% group_by(Family, Role) %>% summarise(Count = n(), .groups = "drop") # 第二步:折叠行,将角色转为列名,计数作为对应列的值 collapsed_by_role <- role_count %>% pivot_wider( names_from = Role, # 把Role列的不同值作为新列名 values_from = Count, # 把Count列的值对应到新列中 values_fill = 0 # 没有对应角色的家庭填充0,避免出现NA )
运行后你会得到类似这样的结果(以你给出的前4条数据为例):
| Family | Father | Mother | Proband | Sibling |
|---|---|---|---|---|
| 11000 | 1 | 1 | 1 | 1 |
方法2:按类型(Type)汇总计数并折叠行
如果想按Parent/Child这个类型维度来汇总,只需要调整分组的变量即可:
# 第一步:按家庭和类型分组,统计每组的样本数 type_count <- df %>% group_by(Family, Type) %>% summarise(Count = n(), .groups = "drop") # 第二步:折叠行,生成类型对应的计数列 collapsed_by_type <- type_count %>% pivot_wider( names_from = Type, values_from = Count, values_fill = 0 )
对应前4条数据的结果会是:
| Family | Parent | Child |
|---|---|---|
| 11000 | 2 | 2 |
额外提示
- 如果需要按其他维度(比如Sex)来汇总,只需要修改
group_by里的第二个变量即可 - 如果你希望保留NA而不是填充0,去掉
values_fill = 0参数就行
内容的提问来源于stack exchange,提问作者Carmen Sandoval
相关产品推荐
相关产品推荐

