根据另一列中的条件删除重复行

时间:2021-06-22 02:14:40

标签: r

假设我有这个数据框:

df <- data.frame(
  a = c(NA,6,6,8),
  x= c(1,2,2,4),
  y = c(NA,2,NA,NA),
  z = c("apple", 2, "2", NA), 
  d = c(NA, 5, 5, 5),stringsAsFactors = FALSE)

第 2 行和第 3 行是重复的,第 3 行的值为 NA。我想删除具有 NA 值的重复行,使其看起来像这样:

df <- data.frame(
  a = c(NA,6,8),
  x= c(1,2,4),
  y = c(NA,2,NA),
  z = c("apple", 2, NA), 
  d = c(NA, 5, 5),stringsAsFactors = FALSE)

我试过了,但没有用:

  
df2 <- df %>% group_by (a,x,z,d) %>% filter(y == max(y))

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

df %>%
   arrange_all() %>%
   filter(!duplicated(fill(., everything())))
   a x  y     z  d
1 NA 1 NA apple NA
2  6 2  2     2  5
3  8 4 NA  <NA>  5

答案 1 :(得分:0)

df %>% arrange(a,x,z,d) %>% distinct(a,x,z,d,.keep_all=TRUE)

   a x  y     z  d
1  6 2  2     2  5
2  8 4 NA  <NA>  5
3 NA 1 NA apple NA

答案 2 :(得分:0)

用之前的非 NA 填充 NA 值并用 distinct 选择唯一的行。

library(dplyr)
library(tidyr)

df %>% fill(everything()) %>% distinct()

#   a x  y     z  d
#1 NA 1 NA apple NA
#2  6 2  2     2  5
#3  8 4 NA  <NA>  5
相关问题