Создание нового набора данных путем переформатирования существующего набора данных

#r

#r

Вопрос:

У меня есть большой фрейм данных (df) с 10 столбцами. Я заинтересован в создании нового фрейма данных, один столбец (col2) сортируется в соответствии со значениями другого столбца (col4). Чтобы использовать более простой пример, мой фрейм данных в настоящее время выглядит так:

 col1  col2    col3    col4
32      12     40      1
36      23     20      1
23      10     19      3
12      13     52      2
40      31     18      2
 

Однако меня интересуют только значения col2, отсортированные по значениям col4. Я бы хотел, чтобы мой новый фрейм данных выглядел так, чтобы я мог легко работать с данными в каждом новом столбце.

 col4 values    1       2      3    
col2 values    12      13     10     
               23      31        
 

Заранее благодарю вас!

Ответ №1:

Попробуйте это. Вы хотите изменить размер определенных столбцов на wide. После установки и загрузки tidyverse следующий код может помочь вам достичь ожидаемого результата:

 library(tidyverse)
#Code
newdf <- mydf %>% select(c(col2,col4)) %>%
  group_by(col4) %>%
  mutate(id=row_number()) %>%
  pivot_wider(names_from=col4,values_from=col2,
              names_sort = T) %>%
  select(-id)
 

Вывод:

 # A tibble: 2 x 3
    `1`   `2`   `3`
  <int> <int> <int>
1    12    13    10
2    23    31    NA
 

Некоторые используемые данные:

 #Data
mydf <- structure(list(col1 = c(32L, 36L, 23L, 12L, 40L), col2 = c(12L, 
23L, 10L, 13L, 31L), col3 = c(40L, 20L, 19L, 52L, 18L), col4 = c(1L, 
1L, 3L, 2L, 2L)), class = "data.frame", row.names = c(NA, -5L
))