Я имею dataframe ds
агрегатного dataframe подмножество R
CountyID ZipCode Value1 Value2 Value3 ... Value25
1 1 0 etc etc etc
2 1 3
3 1 0
4 1 1
5 2 2
6 3 3
7 4 7
8 4 2
9 5 1
10 6 0
и хотел бы агрегат, основанный на ds$ZipCode
и установить ds$CountyID
равные первичную основой округа на самом высоком ds$Value1
. Для приведенного выше примера, это будет выглядеть следующим образом:
CountyID ZipCode Value1 Value2 Value3 ... Value25
2 1 4 etc etc etc
5 2 2
6 3 3
7 4 9
9 5 1
10 6 0
Все ValueX
столбцы сумма этого столбца, сгруппированные по ZipCode
.
Я пробовал кучу разных стратегий за последние пару дней, но никто из них не работает. Лучшее, что я придумал это
#initialize the dataframe
ds_temp = data.frame()
#loop through each subset based on unique zipcodes
for (zip in unique(ds$ZipCode) {
sub <- subset(ds, ds$ZipCode == zip)
len <- length(sub)
maxIndex <- which.max(sub$Value1)
#do the aggregation
row <- aggregate(sub[3:27], FUN=sum, by=list(
CountyID = rep(sub$CountyID[maxIndex], len),
ZipCode = sub$ZipCode))
rbind(ds_temp, row)
}
ds <- ds_temp
Я не был в состоянии проверить это на реальных данных, но с фиктивными наборов данных (например, один из приведенных выше), я получаю ошибку «аргументы должны имеют одинаковую длину). Я возился с репутацией() и фиксированные векторы (например c(1,2,3,4)
), но независимо от того, что я делаю, то ошибка не повторится. Я тоже иногда получаю сообщение об ошибке с эффектом
не может подмножество данных типа «закрытие».
Любые идеи? Я также пытался возиться с data.frame()
, ddply()
, data.table()
, dcast()
и т.д.
В ответ на ваши комментарии, я добавил ответ, который отображает имена столбцов красиво –