我正在尝试删除具有偏移值的行。
library(dplyr)
a <- c(1, 1, 1, 1, 2, 2, 2, 2,2,2)
b <- c("a", "b", "b", "b", "c", "c","c", "d", "d", "d")
d <- c(10, 10, -10, 10, 20, -20, 20, 30, -30, 30)
o <- c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J")
df <- tibble(ID = a, SEQ = b, VALUE = d, OTHER = o)
生成按 ID 和 SEQ 分组的有序表。
> df
# A tibble: 10 x 4
ID SEQ VALUE OTHER
<dbl> <chr> <dbl> <chr>
1 1 a 10 A
2 1 b 10 B
3 1 b -10 C
4 1 b 10 D
5 2 c 20 E
6 2 c -20 F
7 2 c 20 G
8 2 d 30 H
9 2 d -30 I
10 2 d 30 J
我想删除行对 (2,3)、(5,6)、(8,9),因为 VALUE 否定匹配的上一行中的 VALUE。
我希望结果表是
> df2
# A tibble: 4 x 4
ID SEQ VALUE OTHER
<dbl> <chr> <dbl> <chr>
1 1 a 10 A
2 1 b 10 D
3 2 c 20 G
4 2 d 30 J
我知道我不能使用group_by %>% summarize
,因为我需要保留 OTHER 中的值。我看过dplyr::lag()
功能,但我不知道这有什么帮助。我相信我可以用某种类型的循环遍历表格for each
循环并生成一个可用于删除行的逻辑向量,但我希望有一个更优雅的解决方案。