2013-09-22 5 views
0

Я новичок в R, и я не знаю, как получить 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 и т. д. (я не знаю я не знаю, ясно ли я).

Как я могу получить это, не делая это одной группой?

ответ

2

С базой, используя 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.

Другой альтернативой является использование 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 
+0

Спасибо, это тоже работает. – Stefano

2

Пусть ФР ваш dataframe:

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 
+0

Спасибо, это работает хорошо для помощи слов, то я полагаю, я нужно снова это сделать для средств групп, не так ли? – Stefano

+0

Нет, он уже дал вам слова слов Группы. Как вы видите, для первой группы и первого слова среднее значение равно 3,33, а для второй группы и первого слова среднее значение равно 2,33 и так далее. – Metrics

+0

Боюсь, что они не являются (единственными) средними значениями, которые я хочу. Разве это не среднее в строке 1 (3.33) среднее значение WLNs слова 1? и среднее значение в строке 2 (2.33) означает среднее значение WLNs слова 2? и так далее (что мне кажется отличным от того, что вы здесь говорите)? – Stefano

1

с основанием:

with(df,tapply(WLN,list(GROUP,WORD),mean)) 

Edit:

Если вы хотите row- и colmeans для приведенной выше таблицы, вы могли бы сделать что-то вроде этого:

x <- with(df,tapply(WLN,list(GROUP,WORD),mean)) 
addmargins(x, margin = seq_along(dim(x)), FUN = mean, quiet = TRUE) 
+0

Thank вы за свой ответ. Я полагаю, что после использования этого кода мне нужно запустить другой код, чтобы получить среднее значение слов по группам, не так ли? Я думал, что это можно сделать автоматически. – Stefano

0

А теперь dplyr еще лучше ...

require(dplyr) 
tmp <- group_by(df, WORD) 
df1 <- summarise(tmp, 
    count = n(), 
    mWLN = mean(WLN, na.rm = TRUE)) 
df1