将长表格拆分成行,但将重复项合并为以“;”分隔的字符串?

Split a long form into rows but with duplicates merged as a string delimited with ";"?

假设我有一个要拆分成行的数据框。

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

谢谢!

试试这个 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