使用库整形2或类似工具整形R中的数据帧

使用库整形2或类似工具整形R中的数据帧,r,dataframe,reshape,reshape2,R,Dataframe,Reshape,Reshape2,我有这样的数据帧: Id Date 1 12.3.2011 1 22.2.2012 1 15.8.2015 2 2.7.2017 2 2.10.2017 3 1.9.2014 3 31.1.2015 3 11.11.2016 Id Date_1 Date_2 Date_3 1 12.3.2011 22.2.2012 15.8.2015 2 2.7.2017 2.10.2017 3 1.9.2014 3

我有这样的数据帧:

Id  Date
1   12.3.2011
1   22.2.2012
1   15.8.2015
2   2.7.2017
2   2.10.2017
3   1.9.2014
3   31.1.2015
3   11.11.2016
Id  Date_1      Date_2      Date_3
1   12.3.2011   22.2.2012   15.8.2015
2   2.7.2017    2.10.2017   
3   1.9.2014    31.1.2015   11.11.2016
如何在R中获取数据帧,如下所示:

Id  Date
1   12.3.2011
1   22.2.2012
1   15.8.2015
2   2.7.2017
2   2.10.2017
3   1.9.2014
3   31.1.2015
3   11.11.2016
Id  Date_1      Date_2      Date_3
1   12.3.2011   22.2.2012   15.8.2015
2   2.7.2017    2.10.2017   
3   1.9.2014    31.1.2015   11.11.2016

谢谢

基于
dplyr
tidyr
的解决方案

library(dplyr)
library(tidyr)

dt2 <- dt %>%
  group_by(Id) %>%
  mutate(Number = paste0("Date", 1:n())) %>%
  spread(Number, Date)
dt2
# A tibble: 3 x 4
# Groups:   Id [3]
     Id     Date1     Date2      Date3
* <int>     <chr>     <chr>      <chr>
1     1 12.3.2011 22.2.2012  15.8.2015
2     2  2.7.2017 2.10.2017       <NA>
3     3  1.9.2014 31.1.2015 11.11.2016
或者使用
data.table

library(dplyr)
library(reshape2)

dt2 <- dt %>%
  group_by(Id) %>%
  mutate(Number = paste0("Date", 1:n())) %>%
  dcast(Id ~ Number, value.var = "Date")
dt2
  Id     Date1     Date2      Date3
1  1 12.3.2011 22.2.2012  15.8.2015
2  2  2.7.2017 2.10.2017       <NA>
3  3  1.9.2014 31.1.2015 11.11.2016
dt_temp <- as.data.table(dt)
dt_temp2 <- dt_temp[, Number := paste0("Date", as.character(1:.N)), by = Id]

dcast(dt_temp2, Id ~ Number, value.var = "Date")
   Id     Date1     Date2      Date3
1:  1 12.3.2011 22.2.2012  15.8.2015
2:  2  2.7.2017 2.10.2017         NA
3:  3  1.9.2014 31.1.2015 11.11.2016

dt_temp基于
dplyr
tidyr
的解决方案

library(dplyr)
library(tidyr)

dt2 <- dt %>%
  group_by(Id) %>%
  mutate(Number = paste0("Date", 1:n())) %>%
  spread(Number, Date)
dt2
# A tibble: 3 x 4
# Groups:   Id [3]
     Id     Date1     Date2      Date3
* <int>     <chr>     <chr>      <chr>
1     1 12.3.2011 22.2.2012  15.8.2015
2     2  2.7.2017 2.10.2017       <NA>
3     3  1.9.2014 31.1.2015 11.11.2016
或者使用
data.table

library(dplyr)
library(reshape2)

dt2 <- dt %>%
  group_by(Id) %>%
  mutate(Number = paste0("Date", 1:n())) %>%
  dcast(Id ~ Number, value.var = "Date")
dt2
  Id     Date1     Date2      Date3
1  1 12.3.2011 22.2.2012  15.8.2015
2  2  2.7.2017 2.10.2017       <NA>
3  3  1.9.2014 31.1.2015 11.11.2016
dt_temp <- as.data.table(dt)
dt_temp2 <- dt_temp[, Number := paste0("Date", as.character(1:.N)), by = Id]

dcast(dt_temp2, Id ~ Number, value.var = "Date")
   Id     Date1     Date2      Date3
1:  1 12.3.2011 22.2.2012  15.8.2015
2:  2  2.7.2017 2.10.2017         NA
3:  3  1.9.2014 31.1.2015 11.11.2016

dt_temp这通常称为“从长到宽”重塑。看看这通常被称为“从长到宽”的重塑。看看