使用特定条件从dataframe获取不同的行

使用特定条件从dataframe获取不同的行,r,dataframe,R,Dataframe,我有一个数据帧: ID Name Value 1 John 17 1 17 2 NULL 3 NULL 4 Mike 35 4 Mike NULL 5 Leo 22 5 Leo 我希望只有具有唯一ID的行。我需要保持这些行具有最大的完整列。因此,期望的结果是: ID Name Value 1 John

我有一个数据帧:

ID    Name    Value 
1     John    17
1             17
2             NULL
3             NULL
4    Mike     35
4    Mike     NULL  
5    Leo      22
5    Leo      
我希望只有具有唯一ID的行。我需要保持这些行具有最大的完整列。因此,期望的结果是:

ID    Name    Value 
1     John    17
2             NULL
3             NULL
4    Mike     35
5    Leo      22
正如您所看到的,所有ID都被保留,但现在只有最大列数的软管。我怎么能这么做


我尝试了df[complete_cases(df),],但它删除了完全空的行(ID 2和3)

使用
aggregate
和选项
na.action=na.pass

aggregate(cbind(Value, Name) ~ ID, dat, el, na.action=na.pass)
#   ID Value Name
# 1  1    17 John
# 2  2  NULL <NA>
# 3  3  NULL <NA>
# 4  4    35 Mike
# 5  5    22  Leo
聚合(cbind(Value,Name)~ID,dat,el,na.action=na.pass) #ID值名称 #1117约翰 #2空 #3 3无效 #435迈克 #5 5 22狮子座
数据:


dat我会在这样的管道中使用
dplyr::distinct()

df%>%distinct(ID,.keep_all=TRUE)
(.keep_all=TRUE以保留其他列)

或者在R底

df[!重复(df$ID),]


这两个函数都可以完成任务

您尝试了什么,在哪里卡住了?@Sotos我尝试使用distinct()和fill()函数,但都不起作用。我真不明白怎么把事情弄得这么复杂subset@Sotos我还尝试了df[complete_cases(df),],但它删除了完全空的行(ID 2和3)distinct(df,ID,.keep_all=TRUE),这是否回答了您的问题?
dat <- structure(list(ID = c(1L, 1L, 2L, 3L, 4L, 4L, 5L, 5L), Name = c("John", 
NA, NA, NA, "Mike", "Mike", "Leo", "Leo"), Value = c("17", "17", 
"NULL", "NULL", "35", NA, "22", "NULL")), class = "data.frame", row.names = c(NA, 
-8L))