【发布时间】:2017-02-03 02:53:10
【问题描述】:
我有一个包含数千行的数据框,其中包含我感兴趣的两列,ID 和日期。某些 ID 重复,但日期不重复。我希望每个 ID 只有一行,然后将不同的日期存储到列中,例如:UniqueID、date1、date2 等。
有谁知道最好的方法是什么?我使用 R,在 R 中是否有任何最佳方法可以做到这一点?
【问题讨论】:
我有一个包含数千行的数据框,其中包含我感兴趣的两列,ID 和日期。某些 ID 重复,但日期不重复。我希望每个 ID 只有一行,然后将不同的日期存储到列中,例如:UniqueID、date1、date2 等。
有谁知道最好的方法是什么?我使用 R,在 R 中是否有任何最佳方法可以做到这一点?
【问题讨论】:
你的意思是这样的吗?
require(dplyr)
require(tidyr)
dates <- c("02/26/92", "02/27/92", "01/14/92", "02/28/92", "02/01/92")
dat <- data.frame(id = c(1,1,2,3,2), date = as.Date(dates, "%m/%d/%y"))
dat 如下:
id date
1 1 1992-02-26
2 1 1992-02-27
3 2 1992-01-14
4 3 1992-02-28
5 2 1992-02-01
使用以下技巧
dat %>%
select(id, date) %>% #here you select the columns that you want to use
group_by(id) %>%
mutate(seq = paste0("date", row_number(id))) %>%
spread(seq, date)
变成这样:
Source: local data frame [3 x 3]
Groups: id [3]
id date1 date2
* <dbl> <date> <date>
1 1 1992-02-26 1992-02-27
2 2 1992-01-14 1992-02-01
3 3 1992-02-28 <NA>
【讨论】: