簡體   English   中英

如何使用 dplyr 根據前一行的值過濾某些行?

[英]How to filter certain rows based on the preceding row's value using dplyr?

我有一個像這樣的 dataframe:

df1 <- data.frame(
  Group = c('A', 'B', 'C', 'D', 'Total: CD', 'E', 'F', 'G', 'Total: FG', 'H'),
  Value1 = c(12, 88, 10, 90, 100, 8, 4, 11, 15, 77)
)

我想過濾掉包含單詞Total的行之后的任何行,結果如下所示:

df_desired <- data.frame(
  Group = c('A', 'B', 'C', 'D', 'Total: CD', 'F', 'G', 'Total: FG'),
  Value1 = c(12, 88, 10, 90, 100, 4, 11, 15)
)

我將如何在 R 中實現這一點,理想情況下使用dplyr package?

dplyr中使用lag -

library(dplyr)

df1 %>% filter(!lag(grepl('Total', Group), default = FALSE))

#      Group Value1
#1         A     12
#2         B     88
#3         C     10
#4         D     90
#5 Total: CD    100
#6         F      4
#7         G     11
#8 Total: FG     15

也許是這樣的:

library(tidyverse)

df1 <- data.frame(
  Group = c('A', 'B', 'C', 'D', 'Total: CD', 'E', 'F', 'G', 'Total: FG', 'H'),
  Value1 = c(12, 88, 10, 90, 100, 8, 4, 11, 15, 77)
)



df_desired <- data.frame(
  Group = c('A', 'B', 'C', 'D', 'Total: CD', 'F', 'G', 'Total: FG'),
  Value1 = c(12, 88, 10, 90, 100, 4, 11, 15)
)

df_desired
#>       Group Value1
#> 1         A     12
#> 2         B     88
#> 3         C     10
#> 4         D     90
#> 5 Total: CD    100
#> 6         F      4
#> 7         G     11
#> 8 Total: FG     15


df1[-c(which(str_detect(df1$Group, 'Total')) + 1), ]
#>       Group Value1
#> 1         A     12
#> 2         B     88
#> 3         C     10
#> 4         D     90
#> 5 Total: CD    100
#> 7         F      4
#> 8         G     11
#> 9 Total: FG     15

代表 package (v2.0.1) 於 2021 年 11 月 30 日創建

暫無
暫無

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

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