r - 如果前一行具有相同的值/字符串,则删除行(对于每个组)
问题描述
对于每个组,如果值与前一行匹配,我想删除该行
x <- c(1,1,1,1,2,2,2,2)
y <- c("A","B","B","A","A","A","B","B")
xy <- data.frame(x,y)
colnames(xy)<-c("group","value")
xy
它应该导致
x <- c(1,1,1,2,2)
y <- c("A","B","A","A","B")
result_df <- data.frame(x,y)
colnames(result_df)<-c("group","value")
result_df
认为我必须应用滞后的东西,但我不明白。
解决方案
您是对的,这lag
是进行此比较的适当方法。首先是您group_by
的组值,以便它在每个类别中过滤,然后过滤掉那些值等于lag(value)
前一个值的值。该is.na
语句补偿了每组中第一个滞后值为 NA 的情况。
library(dplyr)
xy %>% group_by(group) %>% filter(value!=lag(value) | is.na(lag(value)))
# A tibble: 5 x 2
# Groups: group [2]
# group value
# <dbl> <fct>
# 1 1.00 A
# 2 1.00 B
# 3 1.00 A
# 4 2.00 A
# 5 2.00 B