簡體   English   中英

使用 R 中的多個條件刪除 df 中的行

[英]Remove rows in df using multiple conditions in R

是否可以通過引用 2 列或更多列中的特定字符串或因子級別來刪除數據行? 對於小型數據集,這很容易,因為我可以滾動瀏覽數據框並刪除我想要的行,但是對於較大的數據集,如何在沒有無休止地滾動查看哪些行符合我的標准的情況下實現這一點?

假數據:

df1 <- data.frame(year = rep(c(2019, 2020), each = 10),
                  month = rep(c("March", "October"), each = 1), 
                  site = rep(c("1", "2", "3", "4", "5"), each = 2),
                  common_name = rep(c("Tuna", "shark"), each = 1),
                  num = sample(x = 0:2, size  = 20, replace = TRUE))

例如:如何在一行代碼中僅刪除 2019 年 3 月的站點“1”,而不查看它在哪一行?

您可以使用subset()

df1 <- data.frame(year = rep(c(2019, 2020), each = 10),
                  month = rep(c("March", "October"), each = 1), 
                  site = rep(c("1", "2", "3", "4", "5"), each = 2),
                  common_name = rep(c("Tuna", "shark"), each = 1),
                  num = sample(x = 0:2, size  = 20, replace = TRUE))

subset(df1, !(site == "1" & year == 2019 & month == "March"))
#>    year   month site common_name num
#> 2  2019 October    1       shark   0
#> 3  2019   March    2        Tuna   1
#> 4  2019 October    2       shark   0
#> 5  2019   March    3        Tuna   0
#> 6  2019 October    3       shark   0
#> 7  2019   March    4        Tuna   2
#> 8  2019 October    4       shark   2
#> 9  2019   March    5        Tuna   0
#> 10 2019 October    5       shark   2
#> 11 2020   March    1        Tuna   1
#> 12 2020 October    1       shark   1
#> 13 2020   March    2        Tuna   2
#> 14 2020 October    2       shark   2
#> 15 2020   March    3        Tuna   1
#> 16 2020 October    3       shark   0
#> 17 2020   March    4        Tuna   1
#> 18 2020 October    4       shark   0
#> 19 2020   March    5        Tuna   0
#> 20 2020 October    5       shark   2

reprex 包於 2022-05-31 創建 (v2.0.1)

我們也可以使用paste

subset(df1, paste(year, month, site) != '2019 March 1')

-輸出

   year   month site common_name num
2  2019 October    1       shark   1
3  2019   March    2        Tuna   1
4  2019 October    2       shark   2
5  2019   March    3        Tuna   0
6  2019 October    3       shark   0
7  2019   March    4        Tuna   2
8  2019 October    4       shark   1
9  2019   March    5        Tuna   1
10 2019 October    5       shark   1
11 2020   March    1        Tuna   1
12 2020 October    1       shark   1
13 2020   March    2        Tuna   1
14 2020 October    2       shark   2
15 2020   March    3        Tuna   1
16 2020 October    3       shark   0
17 2020   March    4        Tuna   1
18 2020 October    4       shark   1
19 2020   March    5        Tuna   1
20 2020 October    5       shark   2

使用 R 括號表示法替代subsetdplyr:filter的一行:

df2 <- df1[!(df1$site=="1" & df1$year==2019 & df1$month=="March"),]

暫無
暫無

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

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