如何从数据框“df”中删除重复的行,但仅当“df”的特定列为 NA 时?

How to remove duplicated rows from a dataframe `df` but only when a specific column of the `df` is NA?

我有一个包含 5 列的数据框 dfRegion.Label 表示进行研究的区域,Sample.Label 是该区域内我统计鸟类的特定区域,Sp 是我在该特定区域发现的鸟类,Distance是鸟和我之间的距离,Effort是我在该地区寻找鸟的时间。当 DistanceNA 时,表示该区域未观察到该物种。作为数据框的示例,我有:

df <- data.frame(Region.Label=c("A","A","A","A","A","A","A","A"),
                 Sample.Label=c(1,1,1,2,2,2,3,3),
                 Sp=c("ZZ","ZZ","BB","ZZ","BB","CC","ZZ","BB"),
                 Distance=c(2,7,NA,NA,NA,6,NA,NA),
                 Effort=c(99,99,99,87,87,87,72,72))

df$Region.Label <- as.factor(df$Region.Label)
df$Sample.Label <- as.numeric(df$Sample.Label)
df

  Region.Label Sample.Label Sp Distance Effort
1            A            1 ZZ        2     99
2            A            1 ZZ        7     99
3            A            1 BB       NA     99
4            A            2 ZZ       NA     87
5            A            2 BB       NA     87
6            A            2 CC        6     87
7            A            3 ZZ       NA     72
8            A            3 BB       NA     72

在这里,我想删除所有在 df$Distance 列中具有 NA 的行,因为这表明该物种未在该区域观察到,但我想删除行with NA for df$Distance 当带有 NA 的行是另一行的副本时,不包括列 df$Sp.

我想获得这个:

 Region.Label Sample.Label Sp Distance Effort
1            A            1 ZZ        2     99
2            A            1 ZZ        7     99
3            A            2 CC        6     87
4            A            3 ZZ       NA     72

在这个例子中,我没有删除 df[7,],因为 Sample.Label 与前面的行不同。我删除 df[8,] 因为 df[7,]df[8,] 除了 df$Sp.

是相等的

有谁知道如何得到我想要的东西?

也许,按操作分组会有所帮助 - 按 'Region.Label'、'Sample.Label'、'Effort'、filter 'Distance' 的非 NA 元素分组如果有任何非 NA 元素或者获取第一行 (row_number() == 1)

library(dplyr)
df %>% 
 group_by(Region.Label, Sample.Label, Effort) %>% 
 filter(if(all(is.na(Distance))) row_number() == 1 else !is.na(Distance)) %>%
 ungroup

-输出

# A tibble: 4 × 5
  Region.Label Sample.Label Sp    Distance Effort
  <fct>               <dbl> <chr>    <dbl>  <dbl>
1 A                       1 ZZ           2     99
2 A                       1 ZZ           7     99
3 A                       2 CC           6     87
4 A                       3 ZZ          NA     72