Цикл для вычисления среднего значения подмножества фрейма данных в r
У меня есть следующие data.frame:
> test
a b c
1 1 4 10
2 1 5 11
3 2 6 12
4 2 7 14
5 2 8 15
6 8 9 15
Я хотел бы написать цикл for, который будет вычислять среднее значение вектора b для каждого значения в векторе a. Поэтому я хотел бы следующий вывод:
> average
1 2 8
[1] 4.5 7.0 9.0
Моя попытка до сих пор
subset<-data.frame()
average<-vector(mode="numeric")
for (i in 1:length(test$a)) {
subset<-subset(test,test$a==test$a[i])
average[i]<-mean(subset$b)
}
Тем не менее, я получаю следующий результат
> average
[1] 4.5 4.5 7.0 7.0 7.0 9.0
Это должно быть довольно легко, но я, к сожалению, не справляюсь.
Не могли бы вы помочь мне?
Заранее большое спасибо.
2 ответа
Решение
Одна строка в базе R...
tapply(test$b,test$a,mean)
1 2 8
4.5 7.0 9.0
Кстати, ваш код не работает, потому что вы перебираете каждый элемент test$a
, даже дублированные значения, а не только над элементами unique(test$a)
,
Вы можете попробовать это с data.table
library(data.table)
setDT(test)
test[, mean (b), by = a]
a V1
1: 1 4.5
2: 2 7.0
3: 8 9.0