具有多个ID和变量的dcast

时间:2020-01-24 18:12:13

标签: r dataframe data.table reshape tidyr

我想“取消融化”具有多个ID和多个融化变量并且被卡住的data.frame。

这是我的数据框的样子:

enter image description here

这是理想的结果

enter image description here

我尝试过:

unmelted <- dcast(setDT(melted), Id, Date, Type ~  Score, Time, 
                                value.var = c("Score","Time"), sep = "")

unmelted <- melted %>%
   group_by(Id, Date, Type) %>%
   unite(variable, Score, Time)%>%
   spread(Score, Time, -Id, Date, Type) 

我不能使用pivot_wider

2 个答案:

答案 0 :(得分:3)

我们可以使用

library(data.table)
dcast(setDT(df1), id + Date + Type ~ rowid(id, Date, Type),
     value.var = c("Score","Time"), sep = "")
#   id       Date Type Score1 Score2 Score3 Score4 Time1 Time2 Time3 Time4
#1:  1 2001-01-13  aaa    123    456    789     NA 12:12 13:12 14:12  <NA>
#2:  2 2001-01-16  ddd    113    145     NA     NA 15:12 16:12  <NA>  <NA>
#3:  3 2001-01-18  bbb    789    145    113    145 17:12 18:12 19:12 20:12

使用来自@M的数据-

答案 1 :(得分:2)

一个touch test解决方案,使用tidyverse的{​​{1}}和gather

spread

您可以更方便地使用tidyr进行相同操作:

library(dplyr)
library(tidyr) #version 1.0.0 which has pivot_wider

df1 %>% 
  group_by(Type) %>% 
  mutate(name_x = row_number()) %>% 
  gather(key=var, value=val, c(Score, Time)) %>% 
  mutate(var = paste(var, name_x, sep="_")) %>% 
  select(-name_x) %>% 
  spread(key=var, value=val)

#> # A tibble: 3 x 11
#> # Groups:   Type [3]
#>      id Date  Type  Score_1 Score_2 Score_3 Score_4 Time_1 Time_2 Time_3 Time_4
#>   <dbl> <chr> <chr>   <dbl>   <dbl>   <dbl>   <dbl> <chr>  <chr>  <chr>  <chr> 
#> 1     1 2001~ aaa       123     456     789      NA 12:12  13:12  14:12  <NA>  
#> 2     2 2001~ ddd       113     145      NA      NA 15:12  16:12  <NA>   <NA>  
#> 3     3 2001~ bbb       789     145     113     145 17:12  18:12  19:12  20:12

数据:

pivot_wider
相关问题