Ищу предложения по разделению строки в R df на несколько строк

#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, изменил запрос, не могли бы вы проверить сейчас