Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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_Grouping_Aggregate - Fatal编程技术网

R 如何按组获取平均值?

R 如何按组获取平均值?,r,grouping,aggregate,R,Grouping,Aggregate,我想通过高低分组得到var1和var2的平均值。 我怎样才能得到每组两个变量的平均值(低和高) 聚合在提供正确输入的情况下执行您所需的操作 要获得多个列的聚合,可以cbind将它们作为结果中的独立列: aggregate(cbind(var1, var2) ~ low+high, data=x, FUN=mean) ## low high var1 var2 ## 1 1 0 3.500000 8.500000 ## 2 0 1 2.666667 7.66

我想通过高低分组得到var1和var2的平均值。 我怎样才能得到每组两个变量的平均值(低和高)



聚合
在提供正确输入的情况下执行您所需的操作

要获得多个列的聚合,可以
cbind
将它们作为结果中的独立列:

aggregate(cbind(var1, var2) ~ low+high, data=x, FUN=mean)
##   low high     var1     var2
## 1   1    0 3.500000 8.500000
## 2   0    1 2.666667 7.666667
如果要计算除
之外的每一列的平均值,
很方便,意思是“所有其他列”:


请注意,
+
如果位于
~
的右侧,则在公式中有特殊含义。这并不意味着一个总和,但它意味着使用这两个因素。在左侧,它表示添加。

aggregate
在适当的输入下执行您需要的操作

要获得多个列的聚合,可以
cbind
将它们作为结果中的独立列:

aggregate(cbind(var1, var2) ~ low+high, data=x, FUN=mean)
##   low high     var1     var2
## 1   1    0 3.500000 8.500000
## 2   0    1 2.666667 7.666667
如果要计算除
之外的每一列的平均值,
很方便,意思是“所有其他列”:


请注意,
+
如果位于
~
的右侧,则在公式中有特殊含义。这并不意味着一个总和,但它意味着使用这两个因素。在左侧,它表示添加。

A
dplyr
解决方案:

ID<-c(1:5)
var1<-c(1:5)
var2<-c(6:10)
low<-c(0,0,1,1,0)
high<-c(1,1,0,0,1)
mydf<-data.frame(ID,var1,var2,low,high)

library(dplyr)
mydf %>%
  group_by(low, high) %>%
  summarise(mean_var1=mean(var1), mean_var2=mean(var2))
正如Richard Scriven指出的,您可能正在谈论您想要表示的Var1和Var2之和,在这种情况下:

library(dplyr)
mydf %>%
  mutate(sum_vars=var1+var2) %>%
  group_by(low, high) %>%
  summarise(mean_sumvars=mean(sum_vars))


  low high mean_sumvars
1   0    1     10.33333
2   1    0     12.00000

A
dplyr
解决方案:

ID<-c(1:5)
var1<-c(1:5)
var2<-c(6:10)
low<-c(0,0,1,1,0)
high<-c(1,1,0,0,1)
mydf<-data.frame(ID,var1,var2,low,high)

library(dplyr)
mydf %>%
  group_by(low, high) %>%
  summarise(mean_var1=mean(var1), mean_var2=mean(var2))
正如Richard Scriven指出的,您可能正在谈论您想要表示的Var1和Var2之和,在这种情况下:

library(dplyr)
mydf %>%
  mutate(sum_vars=var1+var2) %>%
  group_by(low, high) %>%
  summarise(mean_sumvars=mean(sum_vars))


  low high mean_sumvars
1   0    1     10.33333
2   1    0     12.00000

对于单个变量,tapply也非常方便,尤其是在存在多个组的情况下:

> with (dat, tapply(var1, list(low, high), mean))
    0        1
0  NA 2.666667
1 3.5       NA
> 
> 
> with (dat, tapply(var2, list(low, high), mean))
    0        1
0  NA 7.666667
1 8.5       NA
> 
> 
> with (dat, tapply(var1+var2, list(low, high), mean))
   0        1
0 NA 10.33333
1 12       NA
>

对于单个变量,tapply也非常方便,尤其是在存在多个组的情况下:

> with (dat, tapply(var1, list(low, high), mean))
    0        1
0  NA 2.666667
1 3.5       NA
> 
> 
> with (dat, tapply(var2, list(low, high), mean))
    0        1
0  NA 7.666667
1 8.5       NA
> 
> 
> with (dat, tapply(var1+var2, list(low, high), mean))
   0        1
0 NA 10.33333
1 12       NA
>

这里有一个使用
数据的选项。表

library(data.table)
setDT(df1)[, lapply(.SD, mean) ,.(low, high), .SDcols = var1:var2]
#   low high     var1     var2
#1:   0    1 2.666667 7.666667
#2:   1    0 3.500000 8.500000
第二种情况呢

setDT(df1)[, .(sumvars = Reduce(`+`, lapply(.SD, mean))) ,.(low, high), .SDcols = var1:var2]
#   low high  sumvars
#1:   0    1 10.33333
#2:   1    0 12.00000

这里有一个使用
数据的选项。表

library(data.table)
setDT(df1)[, lapply(.SD, mean) ,.(low, high), .SDcols = var1:var2]
#   low high     var1     var2
#1:   0    1 2.666667 7.666667
#2:   1    0 3.500000 8.500000
第二种情况呢

setDT(df1)[, .(sumvars = Reduce(`+`, lapply(.SD, mean))) ,.(low, high), .SDcols = var1:var2]
#   low high  sumvars
#1:   0    1 10.33333
#2:   1    0 12.00000