首页 > 解决方案 > 如果前一行具有相同的值/字符串,则删除行(对于每个组)

问题描述

对于每个组,如果值与前一行匹配,我想删除该行

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

认为我必须应用滞后的东西,但我不明白。

标签: r

解决方案


您是对的,这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 

推荐阅读