2017-09-25 3 views
1

je dois transformer une trame de données en R de quelque chose comme ceci:Transposer R trame de données et concaténer des valeurs qui se produisent dans plusieurs colonnes

id past  present future 
id1 A  A  B 
id2 B     C 
id3 A  C   
id4 B   B  A 

à ceci:

id A    B    C 
id1 past, present future 
id2     past   future 
id3 past       present 
id4 future   past, present 

J'ai essayé de jouer autour de dcast mais je suis assez nouveau à R et n'ai pas été en mesure d'obtenir quelque chose près de ce dont j'ai besoin. Dois-je utiliser autre chose?

Merci!

Répondre

1

Nous pouvons gather au format 'long', regroupés par 'id', 'val', paste les 'clés' éléments ensemble et spread à 'large'

library(tidyverse) 
gather(df1, key, val, -id) %>% 
     filter(val !="") %>% 
     group_by(id, val) %>% 
     summarise(key = toString(key)) %>% 
     spread(val, key, fill = "") 
# A tibble: 4 x 4 
# Groups: id [4] 
#  id    A    B  C 
# * <chr>   <chr>   <chr> <chr> 
#1 id1 past, present  future   
#2 id2      past future 
#3 id3   past    present 
#4 id4  future past, present