我有一个脚本,可以根据三列中的重复值进行删除。有三个以上的列,但我想删除基于那些特定的
DF2021 <-DF2021 [!duplicated (DF2021[,c("column1","column2","column3")]),]
上面的脚本很有效,每次基于这三列出现重复时,我都会留下一行。
下一步是我想知道如何确保我留下了基于标准的行。例如,我想要NA最少的一行。
column1|column2|column3|column4|column5|column6|column 7
Jan Tue 2020 Blue Warm Hospital NA
Jan Tue 2020 Blue Warm NA NA
Jan Tue 2020 Blue NA NA NA
Feb Thu 2020 Red NA NA NA
Feb Thu 2020 Red Warm NA NA
Feb Thu 2020 Red Warm Garden Run
Mar Thu 2020 Red Cold Desk Bus
最后,我希望重复的值只剩下三行。
column1|column2|column3|column4|column5|column6|column 7
Jan Tue 2020 Blue Warm Hospital NA
Feb Thu 2020 Red Warm Garden Run
Mar Thu 2020 Red Cold Desk Bus
注意,如果我要做
DF2021 <- DF2021[complete.cases(DF2021),]
它只会给我二月和三月的行,而不是一月;大多数";但不必";"满";基于这三行的重复行中的行。
试试这个。您可以创建一个函数来检测完整的行和只有一个NA
的行。有了它,您可以使用索引并选择该行。这里的代码:
#Index for selection
myfun <- function(x)
{
y <- length(which(is.na(x)))
y <- ifelse(y<=1,1,0)
return(y)
}
#Apply
index <- which(apply(df,1,myfun)==1)
#Output
out <- df[index,]
输出:
column1 column2 column3 column4 column5 column6 column7
1 Jan Tue 2020 Blue Warm Hospital <NA>
6 Feb Thu 2020 Red Warm Garden Run
7 Mar Thu 2020 Red Cold Desk Bus