![](/img/trans.png)
[英]How to filter rows based on the previous row and keep previous row using 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.