R语言基于多列年龄数据计算每户未成年儿童人数的实现方法
R实现家庭未成年儿童人数统计方案
核心逻辑是对每行对应的11个家庭成员年龄字段,统计小于18的有效值个数,自动忽略空值(适配家庭成员不足11人的场景)。
方案1:tidyverse 实现(入门友好,逻辑直观)
适合已经接触过dplyr语法的用户,代码可读性最高:
# 加载依赖包 library(dplyr) # 替换示例中的年龄字段匹配规则为你实际的字段规则即可 df <- df %>% rowwise() %>% # 示例中默认年龄字段以age_开头,例如age_1、age_2……age_11,也可手动指定字段向量c(age1,age2,...,age11) mutate(child_count = sum(c_across(starts_with("age_")) < 18, na.rm = TRUE)) %>% ungroup()
参数说明:na.rm = TRUE用于跳过家庭人数不足11人时的空值字段,避免结果返回NA。
方案2:base R 实现(无需装包,兼容性好)
不需要安装任何第三方包,直接运行即可:
# 先指定11个年龄字段的列名,替换为你实际的字段名 age_cols <- c("age1", "age2", "age3", "age4", "age5", "age6", "age7", "age8", "age9", "age10", "age11") # 按行统计小于18的数值个数 df$child_count <- apply(df[, age_cols], 1, function(x) sum(x < 18, na.rm = TRUE))
方案3:data.table 实现(超大数据集优先,运算速度最快)
如果你的数据集超过10万行,优先用这个方案,运算效率比前两种高5-10倍:
library(data.table) # 将数据框转为data.table格式 setDT(df) # 指定11个年龄字段名,替换为你实际的字段名 age_cols <- c("age1", "age2", "age3", "age4", "age5", "age6", "age7", "age8", "age9", "age10", "age11") # 按行生成统计结果 df[, child_count := rowSums(.SD < 18, na.rm = TRUE), .SDcols = age_cols]
所有方案统计完成后,可随机抽取3-5行手动核对年龄字段的统计结果,验证逻辑是否符合预期。
内容的提问来源于stack exchange,提问作者lziegs
相关产品推荐
相关产品推荐

