似乎是xor逻辑运算的任务。该xor操作给出:
# x y xor
# 1 TRUE TRUE FALSE
# 2 TRUE FALSE TRUE
# 3 FALSE TRUE TRUE
# 4 FALSE FALSE FALSE
使用这个,如果我们取df$c然后xorwith c(NA, head(df$c, -1)),后者是 的移位版本df$c,那么我们得到:
# x y xor
# 1 TRUE NA NA
# 2 TRUE TRUE FALSE
# 3 FALSE TRUE TRUE
# 4 FALSE FALSE FALSE
# 5 FALSE FALSE FALSE
# 6 TRUE FALSE TRUE
# 7 TRUE TRUE FALSE
# 8 TRUE TRUE FALSE
在这里你想要那些条目是TRUE. 所以,
df[with(df, xor(c, c(NA, head(c, -1))) %in% TRUE), ]
# a b c
# 3 t3 8 FALSE
# 6 t6 5 TRUE
更好的是,我们可以消除NA和因此的%in%使用:
df[with(df, xor(c, c(c[1], head(c, -1)))), ]
# a b c
# 3 t3 8 FALSE
# 6 t6 5 TRUE