我正在尝试对数据框进行子集化,以仅保留两个变量的值与先前保留的行的值不同的行。
开始于
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 的值在两行中不同
我曾假设 dplyr
包中的 lag
函数可以提供帮助
并且以下代码将返回 df_wanted 但它确实返回了预期的结果
library(dplyr)
df_attempt<-df %>%
filter(lag(x)!=x & lag(y)!=y)
有没有使用滞后函数解决这个问题的方法?
最佳答案
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
关于r - 根据前一行中多个变量的值对行进行条件过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55680057/