Как объединить последующие значения конкретного столбца в таблице в r - PullRequest
0 голосов
/ 19 мая 2018

Я хочу объединить повторяющиеся строки только с конкретным контентом.

допустим, у меня есть следующая датафрама

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

Я хочу объединить только последующее действие A only.
, поэтому результат будет:

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

как я могу сделать это в R?
thx

1 Ответ

0 голосов
/ 19 мая 2018

Пока нет других условий для сопоставления, это будет работать с:

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     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...