#r #dplyr #reshape2
#r #dplyr #изменение формы 2
Вопрос:
Предположим, у меня есть фрейм данных, который я хочу разбить на строки.
temp = data.frame ( group=c('a','b','c'), fruits = c('apple', 'orange', 'none'), days=c('mon','tues','wed') )
reshape2::dcast(temp , days ~ group, value.var=c ( "fruits") )
days a b c
1 mon apple <NA> <NA>
2 tues <NA> orange <NA>
3 wed <NA> <NA> none
Это работает нормально, однако, когда я добавляю дублированную строку как таковую.
temp = rbind ( temp, c('a','orange','mon') )
приведение не удалось бы и отображалось бы только общее количество. Чего я действительно хочу, так это чего-то подобного.
days a b c
1 mon apple;orange <NA> <NA>
2 tues <NA> orange <NA>
3 wed <NA> <NA> none
Спасибо!
Ответ №1:
Попробуйте это tidyverse
решение. Вы можете объединить свои данные с помощью paste0()
, чтобы получить правильную структуру для преобразования в широкий формат:
library(tidyverse)
#Code
temp %>%
group_by(group,days) %>%
summarise(fruits=paste0(fruits,collapse = ';')) %>%
pivot_wider(names_from = group,values_from=fruits)
Вывод:
# A tibble: 3 x 4
days a b c
<chr> <chr> <chr> <chr>
1 mon apple;orange NA NA
2 tues NA orange NA
3 wed NA NA none
Комментарии:
1. прекрасное спасибо вам! Я также использовал двухэтапные решения, сначала сворачивая пастой, но ваше решение намного чище.