Используя R, я собираюсь рассчитать групповые средства с помощью aggregate(..., mean)
. Однако средний доход неправильный.aggregate + mean возвращает неправильный результат
testdata <-read.table(text="
a b c d year
2 10 1 NA 1998
1 7 NA NA 1998
4 6 NA NA 1998
2 2 NA NA 1998
4 3 2 1 1998
2 6 NA NA 1998
3 NA NA NA 1998
2 7 NA 3 1998
1 8 NA 4 1998
2 7 2 5 1998
1 NA NA 4 1998
2 5 NA 6 1998
2 4 NA NA 1998
3 11 2 7 1998
1 18 4 10 1998
3 12 7 5 1998
2 17 NA NA 1998
2 11 4 5 1998
1 3 1 1 1998
3 5 1 3 1998
",header=TRUE,sep="")
aggregate(. ~ year, testdata,
function(x) c(mean = round(mean(x, na.rm=TRUE), 2)))
colMeans(subset(testdata, year=="1998", select=d), na.rm=TRUE)
aggregate
говорит среднее d
для группы 1998
4,62, но это 4,5.
Сокращение данных только один столбец, aggregate
получает это право:
aggregate(. ~ year, test[4:5],
function(x) c(mean = round(mean(x, na.rm=TRUE), 2)))
Что случилось с моей функции aggregate()
+ mean()
?
Ницца. Или вообще пропустите интерфейс формулы, что и вводит 'na.omit' по умолчанию -' aggregate (testdata [c ("a", "b", "c", "d")], testdata ["year" ], mean, na.rm = TRUE) ' – thelatemail
Этот подход также позволяет вычислять среднее значение, max, min и т. д. для подмножества данных внутри группы (например, таймфрейма), которое имеет числовые значения, игнорируя данные в это группа, которая является NA. Большой! – DirtStats