我有一个名为ID的主键的数据集。主键在多个行之间重复。重复的行有不同数量的缺失信息,表示为NA。
我想按主键ID进行分组,然后保留包含最多信息的记录,保留最少的NA值。
我已经获得了下面的代码,以便为副本获取grouped_by,但我很难删除具有最多NA的行。
对于下面的数据,我想保留第一行,同时删除第二行和第三行,因为它们比第一行缺少更多的值。
第1行只缺少1值,应该保留,而行2-3分别缺少2和3值。
dupes = df %>%
group_by(ID) %>%
filter(n()>1)
ID Product Cost Date Name State
1 X NA 2019 John CA
1 NA 15 NA Bill GA
1 NA NA 2019 NA CA
2 Y 15 2019 Chris CA发布于 2019-03-11 14:18:03
一种选择是根据每一行中的NA数创建一个条件,即在按“ID”分组之后,将具有最小NA元素数的行进行slice
library(dplyr)
df %>%
mutate(n = rowSums(is.na(.))) %>%
group_by(ID) %>%
slice(which.min(n)) %>%
select(-n)或与data.table类似的逻辑
library(data.table)
setDT(df)[df[, .I[which.min(Reduce(`+`, lapply(.SD, is.na)))], ID]$V1]https://stackoverflow.com/questions/55103654
复制相似问题