2015-04-22 125 views
0

我有一個具有重複值的數據幀。它看起來像這樣刪除R中的數據幀中的重複值

5 Bernadette Mendez F 581916 13 72 68 73 75 84 72 68 77 65 71 70 
6 Bobbie Stanley M 347045 13 87 89 86 89 88 87 95 87 89 88 NA 
7 Casey Gonzalez M 732776 13 78 89 99 95 89 85 94 94 98 97 95 
8 Cheryl Silva  F 382579 15 91 91 86 99 89 90 96 88 95 40 NA 
9 Cheryl Silva  F 382579 15 91 91 86 99 89 90 96 88 95 88 90 
10 Crystal Armstrong F 815414 16 86 84 86 76 81 87 85 91 81 81 NA 
11 Doris Russell F 861836 14 89 96 97 78 94 97 86 92 90 99 90 

我想刪除基於第五列重複的行,並保持一個排出來它有最後一個字段爲「NA」的複製品。

我能夠通過使用重複的方法刪除重複的行。但是我無法提出保留哪一行的條件。

回答

1

如果你不想使用duplicated

df[!duplicated(df[, 2:3]), ] # keep first Cheryl 
df[!duplicated(df[, 2:3], fromLast = TRUE), ] # keep last Cheryl 

你可能分裂,應用和重新組合如像:

tmp <- split(df, apply(df[, 2:3], 1, paste, collapse = " ")) # split data frame on names 
idx <- sapply(tmp, nrow) > 1 # identify duplicates 
tmp[idx] <- lapply(tmp[idx], function(df) df[is.na(df[, ncol(df)]), ]) # keep those with NA in last col 
do.call(rbind, tmp) # bind split data frames together again 

看起來不太好,但給你更多的靈活性。

1

分類最後一欄把NA值最後:

df1 <- df1[order(df1[,ncol(df1)], na.last = TRUE), ] 

沒有重複第5列(去年):

df1[!duplicated(df1[,5], fromLast = TRUE), ]