从长到宽格式,字符值在 r

Long to wide format with character value in r

我有一个长数据框如下:

   Date        Time         Type
    1            1            A
    1            2            B
    1            3            C
    2            2            C
    2            3            D 
    2            5            A
    2            7            E

我想将其更改为宽格式,如下所示:

   Date      Time1    Time2    Time3   Time4    Time5    Time6   Time7
     1         A        B        C
     2                  C        D                A                E

我使用了以下代码,但它只给我 0 和 1 值而不是 'Type' 值:

   df_index = ddply(df, .(Date), mutate, index = paste0('Time', 1:length(Date)))
   df2 = dcast(df_index, Date ~ index, value.var = 'Type')   

你能帮我一下吗?

您可以使用 tidyr(您应该研究的神奇 tidyverse 的一部分)相当轻松地完成此操作。

install.packages('tidyr')
install.packages('dplyr')

library(tidyr)
library(dplyr)

all_times <- data.frame(Time = c(1:6))
df <- data.frame(Date = c(1, 1, 1, 2, 2, 2, 2), Time = c(1, 2, 3, 2, 3, 5, 7),Type = c('A', 'B', 'C', 'C', 'D', 'A', 'E'))

spread_df <- df %>% right_join(all_times) %>% spread(Time, Type, sep = '.') %>% filter(!is.na(Date))

根据 PoGibas 的评论编辑