我有一个包含用户信息的 data.frame,但每个用户 ID 可能有也可能没有重复的行,并且不同变量中存在相当多的缺失数据。 我想做的是删除重复的用户数据,但对于每个用户,我想保留行中包含最少缺失值的行,以保留尽可能多的用户信息。以下是创建演示数据框的代码示例。任何帮助将不胜感激,特别是如果它是通过“dplyr”包完成的。
User_Table <- data.frame(User_ID =rep(c("UserA","UserB","UserC"),each=3),
VariableA= rep(c(1,NA,2),each=3),
VariableB = rep(c("TypeA","TypeB",NA),each=3),
VariableC = rep(c(NA,2,3),each=3))
User_Table[c(1,2,4,5,6,7),3] <- NA
最佳答案
这是一种使用 dplyr
的方法:
User_Table %>%
arrange(rowSums(is.na(.))) %>% # sort rows by number of NAs
distinct(User_ID, .keep_all = TRUE) # keep first row per User_ID only
结果:
User_ID VariableA VariableB VariableC
1 UserA 1 TypeA NA
2 UserC 2 <NA> 3
3 UserB NA <NA> 2
关于R 保留重复行中 nas 最少的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38552222/