使用特定条件从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))