【发布时间】:2017-12-11 15:43:40
【问题描述】:
我正在尝试删除具有偏移值的行。
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 循环遍历表并生成可用于删除行的逻辑向量,但我希望有一个更优雅的解决方案。
【问题讨论】:
-
您似乎提出了一个问题,得到了答案,接受了答案,几个小时后您正在编辑问题。这很糟糕——它正在“移动球门柱”。相反,我建议创建一个新问题,链接到这个问题,并解释为什么原来的答案不起作用。
-
谢谢 - 将尝试恢复并遵循您的建议。
标签: r