как объединить значения для каждых выше 3 строк в R - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь установить уникальный флаг сцепления для каждых последних 3 строк по стране и полу группы

eg: for 1st row unique of flag -last 3 (i.e row1:row1) is "Yes" ,2nd row(row2:row1) is "Yes", for row 3 (i.e row3:row1) rows are No&Yes,.. 



country = c("US","US","US","US","US","US","US","US","US","US","US")
gender = c("M","M","M","M","M","F","F","F","F","F","F")
flag = c("Yes","Yes","No","Yes","Yes","Yes","Yes","Yes","Yes","Yes","Yes")

я / р: df = data.frame (страна, пол, флаг)

o/p 
flag_unique_concat = c("Yes","Yes","No,Yes","Yes,No","Yes","Yes","Yes","Yes","Yes","Yes","Yes")

required data set
df1<-cbind(df,flag_unique_concat)

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Мы можем group_by country и gender и, используя rollapply из zoo, мы можем вставить уникальный flag вместе для размера окна 3.

library(dplyr)
library(zoo)

df %>%
  group_by(country, gender) %>%
  mutate(flag_unique_concat = rollapplyr(flag, 3, 
                       function(x) toString(unique(x)), partial = TRUE))


#  country gender flag  flag_unique_concat
#   <fct>   <fct>  <fct> <chr>             
# 1 US      M      Yes   Yes               
# 2 US      M      Yes   Yes               
# 3 US      M      No    Yes, No           
# 4 US      M      Yes   Yes, No           
# 5 US      M      Yes   No, Yes           
# 6 US      F      Yes   Yes               
# 7 US      F      Yes   Yes               
# 8 US      F      Yes   Yes               
# 9 US      F      Yes   Yes               
#10 US      F      Yes   Yes               
#11 US      F      Yes   Yes    
0 голосов
/ 21 марта 2019
ave(df$flag, df$gender, df$country,
    FUN = function(x){
        sapply(seq_along(x), function(i){
            toString(unique(x[max(i-2, 1):i]))
        })
    })
# [1] "Yes"     "Yes"     "Yes, No" "Yes, No" "No, Yes" "Yes"     "Yes"     "Yes"    
# [9] "Yes"     "Yes"     "Yes" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...