簡體   English   中英

如何從 dataframe `df` 中刪除重復的行,但僅當 `df` 的特定列為 NA 時?

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

我有一個df有 5 列的數據框。 Region.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的行,因為它表明該區域沒有觀察到該物種,但是我想刪除df$DistanceNA行,當該行具有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”分組,如果有任何非 NA 元素,則filter “Distance”的非 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM