У меня есть этот игрушечный фрейм данных:
df <- data.frame(id=c(1,1,2,3,4,4),p_id=c(1001,1001,1002,1003,1004,1004),x=c(1,NA,1,2,NA,1),y=c(NA,5,4,NA,6,NA),z=c(NA,NA,2,3,NA,4))
id p_id x y z
1 1001 1 NA NA
1 1001 NA 5 NA
2 1002 1 4 2
3 1003 2 NA 3
4 1004 NA 6 NA
4 1004 1 NA 4
Я бы хотел получить окончательный вывод с удалением уникальных строк 'p_id' и нежелательных значений NA из x, y и z (в идеале, должно работать на любом количестве столбцов). Пример вывода:
p_id x y z
1001 1 5 NaN
1002 1 4 2
1003 2 NaN 3
1004 1 6 4
Я делаю это быстрое решение (не уверен, лучший подход):
df %>% select(-id) %>% group_by(p_id) %>% summarise_all(funs(mean),na.rm=T) %>% ungroup()
Однако этот обходной путь очень медленный при применении к большому кадру данных (2500 x 650), и он создает нежелательные NA для нормальных ячеек. Также для контекста, дублированные строки p_id с NA в этом df происходят из функции расширения.