如何在R中统计每个Parent对应的子项数量(已实现Excel版本)
在R中统计每个Parent对应的成员数量
我来帮你搞定这个需求!你在Excel里用公式实现了统计每个Parent对应的成员数,现在用R来做其实更简洁,我给你两种实用的方法,适配不同的场景:
方法一:基础R实现(无需额外包)
首先我们先构造你的示例数据,方便演示:
# 还原你的数据集 data <- c("Parent", "Child", "Child", "Child", "Parent", "Child", "Child", "Parent", rep("Child", 10))
核心思路是给每个Parent及其后续的Child分配唯一分组ID,然后统计每个分组的元素总数:
# 生成分组ID:每遇到一个"Parent"就创建新分组 group_ids <- cumsum(data == "Parent") # 统计每个分组的成员数量 parent_member_counts <- table(group_ids) # 转换为更直观的数据框格式 result <- data.frame( Parent_Group = paste("Parent", names(parent_member_counts)), Member_Count = as.vector(parent_member_counts) ) print(result)
运行后你会得到和Excel公式一致的结果:第一个Parent对应4个成员,第二个对应3个,第三个对应11个。
逻辑解释
cumsum(data == "Parent")会生成一个递增的向量:每遇到一个Parent,布尔值TRUE会被转为1,累加后分组ID加1,这样同一个Parent和它的所有Child会被分到同一个组里。table()函数会自动统计每个组的元素个数,也就是每个Parent对应的成员总数(包含Parent自己)。
方法二:用dplyr包实现(适合数据框场景)
如果你的数据是存储在数据框中(这是R中更常见的数据分析格式),可以用dplyr包的管道语法来实现,代码可读性更强:
library(dplyr) # 将数据放入数据框 df <- tibble(role = data) # 分组统计成员数 result_df <- df %>% # 创建分组ID mutate(group_id = cumsum(role == "Parent")) %>% # 按分组ID聚合 group_by(group_id) %>% # 统计每组的元素数量 summarise(Member_Count = n()) %>% # 取消分组 ungroup() %>% # 给分组命名(可选) mutate(Parent_Group = paste("Parent", group_id)) %>% select(Parent_Group, Member_Count) print(result_df)
这个方法和基础R的逻辑完全一致,只是用了更适合数据分析的管道语法,后续如果要做更多数据处理会更方便。
内容的提问来源于stack exchange,提问作者Sayan analytics
相关产品推荐
相关产品推荐

