#r #tidyverse #tidyr
#r #tidyverse #tidyr
Вопрос:
У меня есть фрейм данных с приведенной ниже структурой.
df <- data.frame(x = c(1,9), y = c(2,9), z = c(4,9), id_1 = c(5,2), id_2 = c(6,3), id_3 = c(8,7), d1 = c(7,44), d2 = c(8,55), d3 = c(0,76), d4 = c(8,0))
Это мой окончательный ожидаемый результат
df_out <- data.frame(x = c(1,1,1,9,9,9), y = c(2,2,2,9,9,9), z = c(4,4,4,9,9,9), id = c(5,6,8,2,3,7), d1 = c(7,7,7,44,44,44), d2 = c(8,8,8,55,55,55), d3 = c(0,0,0,76,76,76), d4 = c(8,8,8,0,0,0))
Ответ №1:
Работает ли это:
> library(dplyr)
> library(tidyr)
> df %>% pivot_longer(cols = c(id_1,id_2,id_3), values_to = 'id') %>% select(-name) %>% relocate(1:3,8,4:7)
# A tibble: 6 x 8
x y z id d1 d2 d3 d4
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 2 4 5 7 8 0 8
2 1 2 4 6 7 8 0 8
3 1 2 4 8 7 8 0 8
4 9 9 9 2 44 55 76 0
5 9 9 9 3 44 55 76 0
6 9 9 9 7 44 55 76 0
>
Используемые данные:
> dput(df)
structure(list(x = c(1, 9), y = c(2, 9), z = c(4, 9), id_1 = c(5,
2), id_2 = c(6, 3), id_3 = c(8, 7), d1 = c(7, 44), d2 = c(8,
55), d3 = c(0, 76), d4 = c(8, 0)), row.names = c(NA, -2L), class = c("tbl_df",
"tbl", "data.frame"))
Комментарии:
1. Привет, я не вижу созданного нового столбца «id».
2. Это последний столбец.
3. @SuprabhathKalahasti, я расположил столбцы в соответствии с вашим ожидаемым результатом, пожалуйста, проверьте сейчас.
4. Привет @Karthik, большое спасибо за вашу помощь. В моем наборе данных столбцы идентификаторов находятся в разных позициях, а не в фактической последовательности, как я поделился. Поэтому я закончил с указанием имен столбцов в векторе как c(id1, id2, id3). Меняет ли это что-нибудь в контексте кода. После запуска вашего кода я по-прежнему получаю тот же фрейм данных с тем же количеством строк и столбцов? Пожалуйста, посоветуйте
5. @SuprabhathKalahasti, изменил запрос, не могли бы вы проверить сейчас