Дольше поворачивать с несколькими переменными одновременно

#r

#r

Вопрос:

У меня есть набор данных, который выглядит как первое изображение, и я хочу, чтобы он выглядел как второе изображение. Я могу pivot_longer либо по возрасту, либо по скорости, но не оба в одном и том же top являются оригинальными, bottom — это то, к чему я хочу повернуть

Ответ №1:

Мы можем использовать pivot_longer с names_sep

 library(tidyr)
pivot_longer(df1, cols = -ID, names_sep="_", names_to = c(".value", "grp"))
  

-вывод

 # A tibble: 8 x 4
#     ID grp     age speed
#  <int> <chr> <dbl> <dbl>
#1     1 t1       10   100
#2     1 t2       11   300
#3     2 t1       11   500
#4     2 t2       12   100
#5     3 t1       10   200
#6     3 t2       11   300
#7     4 t1       12   100
#8     4 t2       13   400
  

Если имен столбцов несколько _ , мы можем использовать поиск регулярных выражений

 names(df1) <- c("ID", "age_T1", "age_T2", "speed_total_T1", "speed_total_T2")
pivot_longer(df1, cols = -ID, names_sep="_(?=T)", names_to = c(".value", "grp"))
  

-вывод

 # A tibble: 8 x 4
#     ID grp     age speed_total
#  <int> <chr> <dbl>       <dbl>
#1     1 T1       10         100
#2     1 T2       11         300
#3     2 T1       11         500
#4     2 T2       12         100
#5     3 T1       10         200
#6     3 T2       11         300
#7     4 T1       12         100
#8     4 T2       13         400
  

данные

 df1 <- structure(list(ID = 1:4, age_t1 = c(10, 11, 10, 12), age_t2 = c(11, 
12, 11, 13), speed_t1 = c(100, 500, 200, 100), speed_t2 = c(300, 
100, 300, 400)), class = "data.frame", row.names = c(NA, -4L))
  

Комментарии:

1. Спасибо за комментарий. К сожалению, это не превращает первое изображение в вопросе выше во второе изображение. Вместо этого он сохраняет только от «T1» до «T4» в качестве имен столбцов

2. @Ben Что касается ‘T1’ до «T4», это был мой предыдущий код, который я обновил

3. о, извините, переменная скорости на самом деле называется speed_total_T1 через T4

4. Да, мои извинения. Есть ли способ сделать это?

5. @Ben На основе примера, который я показал, будут ли это правильные имена столбцов c("ID", "age_T1", "age_T2", "speed_total_T1", "speed_total_T2")