首页 > 解决方案 > 根据数据框中其他列中的分组值计算列的平均值

问题描述

我无法生成值列的平均值。这是我之前发布的一个类似/重复的问题。

library(dplyr)

df <- data.frame(Dose   = c(1, 1, 1, 1, 1, 1, 10, 10, 10, 10, 10, 10),
                 Route  = c('IV','IV','IV','PO','PO','PO','IV','IV','IV','PO','PO','PO'),
                 Timepoint = c(0.25,0.25,0.25,0.25,0.25,0.25,0.5,0.5,0.5,0.5,0.5,0.5),
                 value =    c(207,181,201,505,180,309,123,122,137,441,335,402))

mean.df <- df %>% aggregate(value~Timepoint + Dose + Route,  FUN = mean)

Error in aggregate.data.frame(., value ~ Timepoint + Dose + Route, FUN = mean) : 
'by' must be a list

当我尝试这个时:

  mean.df <-  df %>% group_by(Timepoint, Dose, Route) %>% summarize(mean_value=mean(value))

我得到的是这个,而不是一个基于时间点、剂量和路线的平均值的表格。

  mean_value
  1   261.9167

我错过了什么?

标签: r

解决方案


我们可以将data参数指定为.

library(dplyr)
df %>% 
     aggregate(value~Timepoint + Dose + Route, data = ., FUN = mean)

summarize可以来自dplyrplyr。如果两个包都已加载,则有可能plyr::summarize掩盖了dplyr::summarize. 所以,我们可以指定包::

df %>% 
  group_by(Timepoint, Dose, Route) %>% 
  dplyr::summarize(mean_value=mean(value), .groups = 'drop')

-输出

# A tibble: 4 x 4
#  Timepoint  Dose Route mean_value
#*     <dbl> <dbl> <chr>      <dbl>
#1      0.25     1 IV          196.
#2      0.25     1 PO          331.
#3      0.5     10 IV          127.
#4      0.5     10 PO          393.

推荐阅读