【发布时间】:2018-10-12 20:02:32
【问题描述】:
我有这个玩具数据框:
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”行和来自 x、y 和 z 的不需要的 NA 值(理想情况下,应该适用于任意数量的列)。示例输出:
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。同样对于上下文,此 df 中具有 NA 的重复 p_id 行来自扩展函数。
【问题讨论】: