0

I have data as follow:

df
id  1  2  3  4    type
1   A  A  B  NA    H1
2   A  C  NA NA    H2
3   B  A  A  A     H1

I want to transform based on column two (df[,2]) to column five (DF[,5])

df_trans
id  tras_col   type
1     A         H1
1     A         H1
1     B         H1
2     A         H2
2     C         H2
3     B         H1
3     A         H1
3     A         H1
3     A         H1

How can I do it in R?

Cina
  • 9,759
  • 4
  • 20
  • 36

1 Answers1

2

Use reshape2::melt()

library(dplyr)
library(reshape2)

df <- structure(list(id = c("1", "2", "3"), `1` = c("A", "A", "B"), 
`2` = c("A", "C", "A"), `3` = c("B", NA, "A"), `4` = c(NA, 
NA, "A"), type = c("H1", "H2", "H1")), class = c("data.frame"), row.names = c(NA, -3L))

reshape2::melt(df,id.vars = c("id","type"),na.rm = TRUE) %>%
    dplyr::select(-variable) %>%
    dplyr::arrange(id) %>%
    dplyr::rename(tras_col = value)
  id type tras_col
1  1   H1        A
2  1   H1        A
3  1   H1        B
4  2   H2        A
5  2   H2        C
6  3   H1        B
7  3   H1        A
8  3   H1        A
9  3   H1        A
yusuzech
  • 5,896
  • 1
  • 18
  • 33