我有一个小标题,称为zero_sum_ab。每个变量都用变量ab_id标识。我正在尝试隔离非顺序值...例如,请参见下面的代码段:
在图中,您可以看到ab_id大多是非顺序的。整个数据中散布着顺序值,例如突出显示的值:2015000110和2015000111。
我想做的是从整个数据集中的这些顺序对组中过滤出 second 值。我的想法是将第二个值隔离在自己的列表中,并使用它来过滤所需的值的整个数据集,但是正在努力寻找一种方法来实现此目的。
答案 0 :(得分:2)
如果要保留顺序记录,请尝试
library(dplyr)
zero_sum_ab %>% filter((ab_id - lag(ab_id)) == 1)
如果要丢弃顺序记录,请尝试
library(dplyr)
zero_sum_ab %>% filter(!(ab_id - lag(ab_id)) == 1)
答案 1 :(得分:1)
另一个选项,类似于CPak的选项:
nginx-proxy
类似地,在dat <- data.frame(ab_id = c(2015000099, 2015000103, 2015000106, 2015000110, 2015000111, 2015000112, 2015000116, 2015000119))
dat
# ab_id
# 1 2015000099
# 2 2015000103
# 3 2015000106
# 4 2015000110
# 5 2015000111
# 6 2015000112
# 7 2015000116
# 8 2015000119
dat[ c(TRUE, diff(dat$ab_id) != 1L),, drop = FALSE]
# ab_id
# 1 2015000099
# 2 2015000103
# 3 2015000106
# 4 2015000110
# 7 2015000116
# 8 2015000119
中:
dplyr
({library(dplyr)
dat %>%
filter(c(TRUE, diff(ab_id) != 1L))
# ab_id
# 1 2015000099
# 2 2015000103
# 3 2015000106
# 4 2015000110
# 5 2015000116
# 6 2015000119
只是diff
的base-R简化)