簡體   English   中英

如何刪除與R數據框中相同值對應的行對?

[英]How to remove pairs of rows corresponding to same value in R dataframe?

對於唯一的ID對,如果兩個對應的行都是 0,我需要刪除它們。 在這種情況下,刪除第 5 行和第 6 行,但不刪除第 7 行和第 8 行。

tmt.pair <- c("A","A","A","A","B","B","B","B")
tmt <- c("1000 C","4000 C","1000 C","4000 C","1000 C","4000 C","1000 C","4000 C")
year <- c("2021","2021","2021","2021","2021","2021","2020","2020")
month <- c("A","A","A","A","J","J","O","O")
level <- c("Low","Low","Up","Up","Low","Low","Low","Low")
site <- c(1,1,2,2,1,1,1,1)
val <- c(100,2,10,9,0,0,1,0)

df <- data.frame(tmt.pair, year,month, level,tmt,val)

df$ID <- cumsum(!duplicated(df[1:4]))

   tmt.pair year month level    tmt val ID
1        A 2021     A   Low 1000 C 100  1
2        A 2021     A   Low 4000 C   2  1
3        A 2021     A    Up 1000 C  10  2
4        A 2021     A    Up 1000 C  10  2
5        B 2021     J   Low 1000 C   0  3
6        B 2021     J   Low 4000 C   0  3
7        B 2020     O   Low 1000 C   1  4
8        B 2020     O   Low 4000 C   0  4

您可以使用以下base R 選項:

df[df$ID %in% df$ID[df$val!=0], ]

輸出:

  tmt.pair year month level    tmt val ID
1        A 2021     A   Low 1000 C 100  1
2        A 2021     A   Low 4000 C   2  1
3        A 2021     A    Up 1000 C  10  2
4        A 2021     A    Up 4000 C   9  2
7        B 2020     O   Low 1000 C   1  4
8        B 2020     O   Low 4000 C   0  4

使用dplyr ,我們可以group_by ID列分組,然后使用filter檢查all val是否為“0”。

library(dplyr)

df %>% group_by(ID) %>% filter(!all(val == 0)) %>% ungroup()

# A tibble: 6 × 7
  tmt.pair year  month level tmt      val    ID
  <chr>    <chr> <chr> <chr> <chr>  <dbl> <int>
1 A        2021  A     Low   1000 C   100     1
2 A        2021  A     Low   4000 C     2     1
3 A        2021  A     Up    1000 C    10     2
4 A        2021  A     Up    4000 C     9     2
5 B        2020  O     Low   1000 C     1     4
6 B        2020  O     Low   4000 C     0     4
df[as.logical(with(df, ave(val, ID, FUN = \(x) !all(x == 0)))), ] tmt.pair year month level tmt val ID 1 A 2021 A Low 1000 C 100 1 2 A 2021 A Low 4000 C 2 1 3 A 2021 A Up 1000 C 10 2 4 A 2021 A Up 4000 C 9 2 7 B 2020 O Low 1000 C 1 4 8 B 2020 O Low 4000 C 0 4

暫無
暫無

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

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