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