首页 > 解决方案 > 如何在r中合并表中特定列的后续值

问题描述

我只想将重复行与特定内容合并。

假设我有以下数据框

df:
user action
1     A
1     A
1     B
1     B
2     A
2     C
2     C
2     A
2     A

我只想合并后续操作A
所以结果是:

user action
1     A
1     B
1     B
2     A
2     C
2     C
2     A

我怎么能在 R 中做到这一点?
谢谢

标签: rmerge

解决方案


只要没有其他条件匹配,这将适用于:

library(magrittr)
library(dplyr)

首先创建一个虚拟列,告诉我们它是否是先前“A”的直接副本:

> df %>% group_by(user) %>% 
    mutate(condition=paste0(action,lag(action)==action)) 
# A tibble: 9 x 3
# Groups:   user [2]
  user  action condition
  <fct> <fct>  <chr>    
1 1     A      ANA      
2 1     A      ATRUE    
3 1     B      BFALSE   
4 1     B      BTRUE    
5 2     A      ANA      
6 2     C      CFALSE   
7 2     C      CTRUE    
8 2     A      AFALSE   
9 2     A      ATRUE    

然后,您可以过滤掉每个用户中 A 跟随另一个 A 的行:

> df %>% group_by(user) %>% 
    mutate(condition=paste0(action,lag(action)==action)) %>% 
    filter(condition!="ATRUE") 
# A tibble: 7 x 3
# Groups:   user [2]
  user  action condition
  <fct> <fct>  <chr>    
1 1     A      ANA      
2 1     B      BFALSE   
3 1     B      BTRUE    
4 2     A      ANA      
5 2     C      CFALSE   
6 2     C      CTRUE    
7 2     A      AFALSE   

您甚至不必显示虚拟列,因为您只需过滤掉与“ATRUE”匹配的行,然后选择您关心的两个变量:

> df %>% group_by(user) %>% 
    mutate(condition=paste0(action,lag(action)==action)) %>% 
    filter(condition!="ATRUE") %>% select(user,action)
# A tibble: 7 x 2
# Groups:   user [2]
  user  action
  <fct> <fct> 
1 1     A     
2 1     B     
3 1     B     
4 2     A     
5 2     C     
6 2     C     
7 2     A     

推荐阅读