2015-07-31 3 views
0

У меня есть data.table вроде этого:Усреднение всех значений по конкретному полю

ID SCORE 
1 100 
1 150 
1 200 
2 30 
3 600 
3 300 

Я хочу создать таблицу, которая усредняет оценку всех людей с определенным ID и помещает его в новый datatable (или то же самое, не имеет значения). Итак, новая таблица данных должна выглядеть так:

ID SCORE 
1 150 
2 30 
3 450 

Я действительно не знаю с чего начать. Я думаю, что должна быть функция R, которая делает это уже, но я не могу ее найти.

ответ

2

Это легко сделать. Предполагая, что ваш data.table называется dt, вы можете написать:

dt[,lapply(.SD,mean),by='ID'] 

Если у вас есть много столбцов, и вы хотите просто среднее значение столбца SCORE, вы можете написать:

dt[,lapply(.SD,mean),by='ID',.SDcols='SCORE'] 

и если вы хочу исключить NA, затем

dt[,lapply(.SD,mean,na.rm=TRUE),by='ID',.SDcols='SCORE'] 

Надеюсь, это поможет.

1

Или с dplyr

df %>% group_by(ID) %>% summarise(Score = mean(SCORE)) 
Source: local data frame [3 x 2] 

    ID Score 
1 1 150 
2 2 30 
3 3 450 
1

Базовый пакет:

aggregate(. ~ ID, df, mean) 

    ID SCORE 
1 1 150 
2 2 30 
3 3 450 

sqldf Использование

sqldf("SELECT ID, AVG(SCORE) AS SCORE 
     FROM df 
     GROUP BY ID") 
Смежные вопросы