我想知道在R中删除表中重复值的方法。问题是我有带有NA的重复行,有些没有。我想最好只保留包含1)无NA或2)尽可能少的NA的行。这是一个示例数据帧:
mat.test=matrix(c(NA,NA,2,NA,NA,NA,NA,3,1,2,2,2,NA,2,3,1,2,4),byrow = T, 6,3)
colnames(mat.test)=c("MBL","MBW","MBD")
df=as.data.frame(mat.test)
df$BAND=c("JP3540","JP3540","JP3540","JP1500","JP2500","JP2500")
df$Date=c("2012-07-23","2012-07-22","2012-07-24","2011-09-03","2011-09-01","2011-09-02")
df
#MBL MBW MBD BAND Date
#1 NA NA 2 JP3540 2012-07-23
#2 NA NA NA JP3540 2012-07-22
#3 NA 3 1 JP3540 2012-07-24
#4 2 2 2 JP1500 2011-09-03
#5 NA 2 3 JP2500 2011-09-01
#6 1 2 4 JP2500 2011-09-02
我想按日期对数据进行排序,因为我想最好保留第一个重复的值:
z <- df[order(df$Date, decreasing=F),]
我知道对于这种大小的数据集,我可以手动删除它们。但是我想让它自动。这是我想要的最终输出。
# MBL MBW MBD BAND Date
#6 1 2 4 JP2500 2011-09-02
#4 2 2 2 JP1500 2011-09-03
#3 NA 3 1 JP3540 2012-07-24
希望你能帮我!谢谢。
我们通过'BAND'拆分
数据集以创建数据集的列表
,获取前三列的最大非NA元素的位置,对数据集进行子集并rbind
它。
res <- do.call(rbind,lapply(split(df, df$BAND),
function(x) x[which.max(rowSums(!is.na(x[1:3]))),]))
row.names(res) <- NULL
res
# MBL MBW MBD BAND Date
#1 2 2 2 JP1500 2011-09-03
#2 1 2 4 JP2500 2011-09-02
#3 NA 3 1 JP3540 2012-07-24
检查na. omit(您的数据帧)