Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 计算组平均值(或其他汇总统计数据)并分配给原始数据_R_Mean_Summary_Mutate_R Faq - Fatal编程技术网

R 计算组平均值(或其他汇总统计数据)并分配给原始数据

R 计算组平均值(或其他汇总统计数据)并分配给原始数据,r,mean,summary,mutate,r-faq,R,Mean,Summary,Mutate,R Faq,我想计算分组变量(“组”)每个级别内数值变量(“值”)的平均值(或长度为1的任何其他汇总统计,例如最小值,最大值,长度,总和) 汇总统计应分配给与原始数据长度相同的新变量。也就是说,原始数据的每一行都应该有一个与当前组值相对应的值-数据集不应该折叠为每组一行。例如,考虑组平均< /代码>: 以前 id group value 1 a 10 2 a 20 3 b 100 4 b 200 之后 一个选项是使用plyrddply需要一个da

我想计算分组变量(“组”)每个级别内数值变量(“值”)的
平均值
(或长度为1的任何其他汇总统计,例如
最小值
最大值
长度
总和

汇总统计应分配给与原始数据长度相同的新变量。也就是说,原始数据的每一行都应该有一个与当前组值相对应的值-数据集不应该折叠为每组一行。例如,考虑组<代码>平均< /代码>:

以前

id  group  value
1   a      10
2   a      20
3   b      100
4   b      200
之后


一个选项是使用
plyr
ddply
需要一个
data.frame
(第一个d)并返回一个
data.frame
(第二个d)。其他XXply函数以类似的方式工作;i、 e.
ldply
需要一个
列表
并返回一个
数据帧
dlply
做相反的事情……等等。第二个参数是分组变量。第三个参数是我们要为每个组计算的函数

require(plyr)
ddply(dat, "group", transform, grp.mean.values = mean(value))

  id group value grp.mean.values
1  1     a    10              15
2  2     a    20              15
3  3     b   100             150
4  4     b   200             150

下面是另一个使用基本函数
aggregate
merge
的选项:

merge(x, aggregate(value ~ group, data = x, mean), 
     by = "group", suffixes = c("", "mean"))

  group id value.x value.y
1     a  1      10      15
2     a  2      20      15
3     b  3     100     150
4     b  4     200     150
您可以使用
后缀获得“更好”的列名:

merge(x, aggregate(value ~ group, data = x, mean), 
     by = "group", suffixes = c("", ".mean"))


  group id value value.mean
1     a  1    10         15
2     a  2    20         15
3     b  3   100        150
4     b  4   200        150

查看
ave
功能。差不多

df$grp.mean.values <- ave(df$value, df$group)

您可以在
dplyr
中使用
mutate
执行此操作:

library(dplyr)
df %>%
  group_by(group) %>%
  mutate(grp.mean.values = mean(value))
…或使用
data.table
通过引用分配新列(
:=
):

df$grp.min <- ave(df$value, df$group, FUN = min)
library(dplyr)
df %>%
  group_by(group) %>%
  mutate(grp.mean.values = mean(value))
library(data.table)
setDT(df)[ , grp.mean.values := mean(value), by = group]