0

Sample dataframe:

name1 <- c('hi', 'bye')
A <- c(1, 5)
B <- c(2, 6)
C <- c(3, 7)

dummy.df <- data.frame(name, A, B, C)

 name1 A B C
1   hi 1 2 3
2  bye 5 6 7

What I would like to end up with:

name letter frequency
1   hi      A         1
2   hi      B         2
3   hi      C         3
4   hi      A         5
5   hi      B         6
6   hi      C         7

Below is what I tried:

name <- rep(name1, each = 3)
letter <- rep(colnames(dummy.df[ ,c(2:4)]), times = 2)

dummy_num <- dummy.df[ ,c(2:4)]     #subsetting to get rid of the first column (non-numeric)

trans_row <- function(i){
transpose(dummy_num[i, , drop = TRUE])}                                               
 #creating a function to transpose each row of the df

data.frame(name, letter, as.vector(c(trans_row(1), trans_row(2))))

   name letter X1 X2 X3 X5 X6 X7
1   hi      A  1  2  3  5  6  7
2   hi      B  1  2  3  5  6  7
3   hi      C  1  2  3  5  6  7
4  bye      A  1  2  3  5  6  7
5  bye      B  1  2  3  5  6  7
6  bye      C  1  2  3  5  6  7

The first two columns are no problem, but I can't get the last one as desired.

katy123456
  • 21
  • 2
  • 1
    You can do `dummy.df %>% pivot_longer(-name1, names_to="letter", values_to="frequency")` for example. This is a basic "wide to long" transformation – MrFlick Jul 19 '23 at 19:09

0 Answers0