我是R的新手,我不知道如何让R计算出子群自身均值的均值子集的均值。我会更清楚地解释。
我有一个这样的数据框:
GROUP WORD WLN
1 1 4
1 1 3
1 1 3
1 2 2
1 2 2
1 2 3
2 3 1
2 3 1
2 3 2
2 4 1
2 4 1
2 4 1
... ... ...
但真正的一组共有5组和25个单词(每组5个单词;每个单词被分配1个到4个5个主题的数字......)。
我需要为每个单词获取WLN的方法,并且我可以使用循环轻松地完成该操作并将结果保存在向量中;但是我需要一个带有这些手段的手段的矢量根据这些词所属的组...所以我需要第1组,第2组等词语的手段...(我不要不知道我是否说清楚了。)
如果不逐一进行,我怎么能得到这个呢?
答案 0 :(得分:4)
使用base,使用aggregate
> aggregate(WLN~GROUP+WORD, mean, data=df)
GROUP WORD WLN
1 1 1 3.333333
2 1 2 2.333333
3 2 3 1.333333
4 2 4 1.000000
其中df
是@Metrics'数据。
另一种方法是使用doBy包中的summaryBy
> library(doBy)
> summaryBy(WLN~GROUP+WORD, FUN=mean, data=df)
GROUP WORD WLN.mean
1 1 1 3.333333
2 1 2 2.333333
3 2 3 1.333333
4 2 4 1.000000
答案 1 :(得分:2)
假设df是您的数据帧:
df<-structure(list(GROUP = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L), WORD = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L,
4L, 4L), WLN = c(4L, 3L, 3L, 2L, 2L, 3L, 1L, 1L, 2L, 1L, 1L,
1L)), .Names = c("GROUP", "WORD", "WLN"), class = "data.frame", row.names = c(NA,
-12L))
Plyr解决方案
install.packages("plyr")
library(plyr)
ddply(df,.(GROUP,WORD),summarize, meanwln=mean(WLN))
GROUP WORD meanwln
1 1 1 3.333333
2 1 2 2.333333
3 2 3 1.333333
4 2 4 1.000000
Data.table解决方案:
install.packages("data.table")
library(data.table)
df<-data.table(df)
setkey(df,GROUP,WORD)
df[,list(meanwln=mean(WLN)),by="GROUP,WORD"]
GROUP WORD meanwln
1: 1 1 3.333333
2: 1 2 2.333333
3: 2 3 1.333333
4: 2 4 1.000000
答案 2 :(得分:1)
with base:
with(df,tapply(WLN,list(GROUP,WORD),mean))
修改强>
如果您还需要上表中的row和colmeans,您可以执行以下操作:
x <- with(df,tapply(WLN,list(GROUP,WORD),mean))
addmargins(x, margin = seq_along(dim(x)), FUN = mean, quiet = TRUE)
答案 3 :(得分:0)
现在dplyr更好......
require(dplyr)
tmp <- group_by(df, WORD)
df1 <- summarise(tmp,
count = n(),
mWLN = mean(WLN, na.rm = TRUE))
df1