2013-10-09 3 views
0

У меня есть dataframe, который выглядит следующим образом:Средняя внутри кадра R данных

name val type group 
1 A3330 184 ave IX13 
2 A3330 42 min IX13 
3 A1473 195 ave IX01 
4 A1473 93 min IX01 
5 A3330 80 ave BG12 
6 A3330 44 min BG12 
7 A1473 15 ave IX3 
8 A1473 91 min IX3 

Я хочу, чтобы в среднем каждое значение Валу, по группам, если тип такой же. Итак, 1 и 5 усредняются, несмотря на то, что они разные группы. То же самое с 2 и 6, 3 и 7, а также 4 и 8. В конце концов, я надеюсь, что новый dataframe который выглядит следующим образом:

name val type 
A3330 132 ave 
A333 43 min 
A1473 105 ave 
A1473 92 min 

Я имею в виду, что я должен сделать что-то вроде этого :

for (metric in type) 
for(names in name) 
    mean(df[df$name==names && type==metric, df$type]) 
} 
} 

Но в моем ограниченном опыте R всегда есть лучший способ, чем цикл. Любые предложения?

ответ

2

не проверял сам, но используя data.table пакет, что-то, как это должно работать для вас -

library(data.table) 
df <- data.table(df) 
df2 <- df[, 
    list(
     meanval = mean(val) 
    ), 
    by = c('name','type') 
] 
+0

я получаю эту ошибку: Ошибка в '[.data.frame' (DF, , list (meanval = mean ("val")), by = c ("name",: неиспользуемый аргумент (by = c ("name", "type")) Эта ошибка означает anythign для вас? – user2076476

+0

Вы можете пропустили 'df <- data.table (df)' – TheComeOnMan

+0

Darn. Я сделал это, но потом забыл использовать новый df. СПАСИБО! – user2076476

Смежные вопросы