R 如何按组获取平均值?
我想通过高低分组得到var1和var2的平均值。 我怎样才能得到每组两个变量的平均值(低和高)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
聚合
在提供正确输入的情况下执行您所需的操作
要获得多个列的聚合,可以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
如果要计算除低
和高
之外的每一列的平均值,
很方便,意思是“所有其他列”:
请注意,
+
如果位于~
的右侧,则在公式中有特殊含义。这并不意味着一个总和,但它意味着使用这两个因素。在左侧,它表示添加。Adplyr
解决方案:
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