You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建含组内观测数变量的数据框时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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 18:45:47