根据上一行中多个变量的值对行进行条件过滤

时间:2019-04-14 21:10:04

标签: r dataframe dplyr

我试图对一个数据帧进行子集处理,以仅保留两个变量的值与先前保留的行的值不同的行。

开头
df<-structure(list(x = c("ARM018", "ARM018", "ARM018", "ARM021", 
"ARM021"), y = c("ARF014", "ARF027", "ARF028", 
"ARF014", "ARF020")), class = "data.frame", row.names = c(NA, 
-5L))

df

我想获得

df_wanted <-structure(list(x = c("ARM018", "ARM021"), y = c("ARF014", 
"ARF020")), class = "data.frame", row.names = c(NA, -2L))

df_wanted

因为两行中x和y的值不同

我假设lag包中的dplyr函数可以提供帮助 并且以下代码将返回df_wanted,但它确实返回了预期的结果

library(dplyr)

df_attempt<-df %>% 
  filter(lag(x)!=x & lag(y)!=y)


使用滞后函数有什么解决办法吗?

1 个答案:

答案 0 :(得分:0)

结合使用dplyr:cumsumdplyr:lag可以达到目的:

library(dplyr)
df %>% mutate_all(as.character) %>% 
  filter(cumsum(x != x[1] & y != y[1]) != 
                lag(cumsum(x != x[1] & y != y[1]), default = -1))

       x      y
1 ARM018 ARF014
2 ARM021 ARF020