R语言data.frame分组subset零行报错及汇总统计合并问题咨询
R实现按年龄分组新增统计列的解决方案
报错原因
你遇到的报错是因为零行数据框无法直接绑定长度为1的常量列:R要求数据框所有列的行数一致,空子集data_2行数为0,你传入的age.group = "2"等参数长度为1,长度不匹配触发报错。手动拆分子集的方案效率极低,不适合数十万行的数据集,以下是两种高效实现方案:
方案1:dplyr实现(代码简洁,十万级数据运行无压力)
# 加载包 library(dplyr) data.test <- data.test %>% # 生成整数型年龄分组 mutate(age.group = cut(age, breaks = c(0,1,2,3,4,5), labels = 0:4, right = TRUE) %>% as.integer() - 1) %>% # 按年龄分组计算统计量 group_by(age.group) %>% mutate( count = n(), # 对应年龄组观测数量 a.ratio = mean(class.type == "A") # 组内A类样本占比 ) %>% ungroup()
方案2:纯base R实现(无需额外安装包)
# 生成年龄分组 data.test$age.group <- cut(data.test$age, breaks = c(0,1,2,3,4,5), labels = 0:4, right = TRUE) data.test$age.group <- as.integer(as.character(data.test$age.group)) # 分组计算组内观测数 data.test$count <- ave(rep(1, nrow(data.test)), data.test$age.group, FUN = length) # 分组计算A类样本占比 data.test$a.ratio <- ave(data.test$class.type == "A", data.test$age.group, FUN = mean)
两种方案都会自动处理空分组,不会触发零行报错,运行效率远高于手动拆分子集再合并的方案,十万行数据处理耗时通常在毫秒级。
内容的提问来源于stack exchange,提问作者Jesse
相关产品推荐
相关产品推荐

