#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")