我试图对一个数据帧进行子集处理,以仅保留两个变量的值与先前保留的行的值不同的行。
以
开头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)
使用滞后函数有什么解决办法吗?
答案 0 :(得分:0)
结合使用dplyr:cumsum
和dplyr: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