Я пытаюсь вычислить медиану (но ее можно заменить аналогичными показателями) по группам для нескольких столбцов на основе подмножеств, определенных другими столбцами. Это прямой вопрос из этого моего предыдущего поста . Я попытался включить вычисление медианы через aggregate
в решение Map(function(x,y) dosomething, x, y)
, любезно предоставленное @Frank, но это не сработало. Позвольте мне проиллюстрировать:
Рассчитать медиану для A и B по группам GRP1 и GRP2
df <- data.frame(GRP1 = c("A","A","A","A","A","A","B","B","B","B","B","B"), GRP2 = c("A","A","A","B","B","B","A","A","A","B","B","B"), A = c(0,4,6,7,0,1,9,0,0,8,3,4), B = c(6,0,4,8,6,7,0,9,9,7,3,0))
med <- aggregate(.~GRP1+GRP2,df,FUN=median)
Simple. Теперь добавьте столбцы, определяющие, какие строки будут использоваться для вычисления медианы, то есть строки с NA должны быть удалены, столбец a определяет, какие строки будут использоваться для вычисления медианы в столбце A, то же самое для столбцов b и B:
a <- c(1,4,7,3,NA,3,7,NA,NA,4,8,1)
b <- c(5,NA,7,9,5,6,NA,8,1,7,2,9)
df1 <- cbind(df,a,b)
Как упоминалось выше, я пытался объединить Map
и aggregate
, но это не сработало. Я предполагаю, что Map
не знает, что делать с GRP1 и GRP2.
med1 <- Map(function(x,y) aggregate(.~GRP1+GRP2,df1[!is.na(y)],FUN=median), x=df1[,3:4], y=df1[, 5:6])
Вот результат, который я ищу:
GRP1 GRP2 A B
1 A A 4 5
2 B A 9 9
3 A B 4 7
4 B B 4 3
Любая помощь будет высоко ценится!