1

我是 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 个单词;每个单词被 5 个科目分配一个从 1 到 4 的数字……)。

我需要为每个单词获取 WLN 的方法,我可以通过循环轻松地做到这一点并将结果保存在向量中;但是然后我需要一个向量,根据单词所属的组,这些手段的手段......所以我需要第 1 组的单词手段,然后是第 2 组,等等......(我不不知道我是否说清楚)。

如果不一组一组地做,我怎么能得到这个?

4

4 回答 4

4

带底座,使用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 的数据在哪里。

另一种选择是使用summaryBydoBy 包

> 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
于 2013-09-22T15:26:08.393 回答
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

数据表解决方案:

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
于 2013-09-22T14:08:27.380 回答
1

带底座:

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)
于 2013-09-22T14:10:29.983 回答
0

现在 dplyr 甚至更好......

require(dplyr)
tmp <- group_by(df, WORD)
df1 <- summarise(tmp, 
   count = n(), 
   mWLN = mean(WLN, na.rm = TRUE))
df1
于 2016-07-04T08:11:46.047 回答