我有一个包含用户信息的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
答案 0 :(得分:1)
我们可以尝试data.table
library(data.table)
setDT(User_Table)[User_Table[, .I[which.min(Reduce(`+`,
lapply(.SD, is.na)))], User_ID]$V1]
# User_ID VariableA VariableB VariableC
#1: UserA 1 TypeA NA
#2: UserB NA NA 2
#3: UserC 2 NA 3
答案 1 :(得分:1)
这是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