Я хотел бы суммировать данные по нескольким столбцам, основываясь на всех строках , кроме строк с определенным значением в отдельном столбце переменной группировки. Например, в df ниже я хочу получить медианы A, B, C, D и E на основе значений из строк, которые не назначены кластеру, соответствующему данной строке.
df = data.frame(cluster = c(1:5, 1:3, 1:2),
A = rnorm(10, 2),
B = rnorm(10, 5),
C = rnorm(10, 0.4),
D = rnorm(10, 3),
E = rnorm(10, 1))
df %>%
group_by(cluster) %>%
summarise_at(toupper(letters[1:5]), funs(m = fun_i_need_help_with(.)))
fun_i_need_help_with даст эквивалент:
first row: median(df[which(df$cluster != 1), "A"])
second row: median(df[which(df$cluster != 2), "A"])
and so on...
Я могу сделать это с помощью вложенных циклов, но он работает довольно медленно и не выглядит хорошим R-подобным решением.
for(col in toupper(letters[1:5])){
for(clust in unique(df$cluster)){
df[which(df$cluster == clust), col] <-
median(df[which(df$cluster != clust), col])
}
}