-1

i need to reshape a dataset from (semi) long format to wide format in R studio

my dataset looks like this:

number  letter
1        A
2        B
2        C
3        D
3        C
3        A

i need to change it to this:

number  letter1 letter2 letter3
1        A
2        B       C
3        D       C       A

reshape wont work because i dont have a time variable like letter1 2 3 etc it doesnt matter in what order the letters get in as long as it starts filling the columns from 1 so at number 3 the order can also be C D A for example

tmfmnk
  • 38,881
  • 4
  • 47
  • 67

2 Answers2

0

Using dplyr and tidyr, you can try:

df %>%
 group_by(number) %>%
 mutate(variable = paste0("letter", row_number())) %>%
 spread(variable, letter)

  number letter1 letter2 letter3
   <int> <chr>   <chr>   <chr>  
1      1 A       <NA>    <NA>   
2      2 B       C       <NA>   
3      3 D       C       A   
tmfmnk
  • 38,881
  • 4
  • 47
  • 67
0

Using dcast() from data.table:

library(data.table)
dcast(df, number ~ paste0("letter", rowid(number)), value.var = "letter")
#   number letter1 letter2 letter3

# 1      1       A    <NA>    <NA>
# 2      2       B       C    <NA>
# 3      3       D       C       A

Data

df <- data.frame(
  number = c(1L, 2L, 2L, 3L, 3L, 3L), 
  letter = c("A", "B", "C", "D", "C", "A")
)
s_baldur
  • 29,441
  • 4
  • 36
  • 69