Я пытаюсь получить сумму числовой переменной за категориальную переменную (в кадре данных). Я пробовал использовать tapply
, но это не занимает целое data.frame
.сумма по группам в data.frame
Вот рабочий пример с некоторыми данными, который выглядит следующим образом:
> set.seed(667)
> df <- data.frame(a = sample(c("Group A","Group B","Group C",NA), 10, rep = TRUE),
b = sample(c(1, 2, 3, 4, 5, 6), 10, rep=TRUE),
c = sample(c(11, 12, 13, 14, 15, 16), 10, rep=TRUE))
> df
a b c
1 Group A 4 12
2 Group B 6 12
3 <NA> 4 14
4 Group C 1 16
5 <NA> 2 14
6 <NA> 3 13
7 Group C 4 13
8 <NA> 6 15
9 Group B 3 16
10 Group B 5 16
с помощью tapply
, я могу получить один вектор в то время:
> tapply(df$b,df$a,sum)
Group A Group B Group C
4 14 5
, но я больше заинтересован в получении что-то вроде этого:
a b c
1 Group A 4 12
2 Group B 14 44
3 Group C 5 29
Любая помощь будет оценена по достоинству. Благодарю.
Спасибо. DWin, ты настоящий мастер. –
@ EricFail или вы можете использовать интерфейс формулы с агрегатом (который я просто нахожу лично более интуитивно понятным), чтобы сделать то же самое: 'aggregate (cbind (b, c) ~ a, data = df, sum)' + 1 –
Донча пожелал, чтобы они поддерживали интерфейс формулы, который будет анализировать LHS, чтобы у новичков, подобных нам, не было бы необходимости использовать этот хакерский 'cbind'? –