创建含组内观测数变量的数据框时n()函数报错的解决方法
解决plyr::ddply中n()报错的问题
报错原因:n()是dplyr专属函数,无法在plyr的summarise函数中直接调用,需要改用plyr兼容的方式统计组内观测数。
方案1:直接用length()统计观测数
利用每组中任意变量的长度代表观测数,修改后的代码如下:
library(plyr) library(car) # 按Plant分组计算汇总统计 CO2_summarized <- ddply(CO2, ~Plant, plyr::summarise, mean = mean(conc), sd = sd(conc), var = var(conc), obs = length(conc)) summary(CO2_summarized)
方案2:先统计分组计数再合并
先用plyr的count()函数单独统计每组观测数,再与汇总结果合并:
library(plyr) library(car) # 统计每组观测数 plant_obs <- count(CO2, "Plant") # 计算均值、标准差、方差 CO2_stats <- ddply(CO2, ~Plant, plyr::summarise, mean = mean(conc), sd = sd(conc), var = var(conc)) # 合并数据并调整列名 CO2_summarized <- merge(CO2_stats, plant_obs, by = "Plant") colnames(CO2_summarized)[colnames(CO2_summarized) == "freq"] <- "obs" summary(CO2_summarized)
方案3:切换到dplyr(推荐)
由于plyr已停止维护,更推荐使用tidyverse生态的dplyr,语法更直观且原生支持n():
library(dplyr) library(car) CO2_summarized <- CO2 %>% group_by(Plant) %>% summarise(mean = mean(conc), sd = sd(conc), var = var(conc), obs = n()) %>% ungroup() summary(CO2_summarized)
内容的提问来源于stack exchange,提问作者Erin
相关产品推荐
相关产品推荐

