按组合并和扩展数据框

时间:2019-04-18 18:52:22

标签: r dataframe

假设我有一个像这样的数据框df

> df <- data.frame(ID = c("A","B","C"),
                 value = c(1,2,3))
> df
  ID value
1  A     1
2  B     2
3  C     3

我想通过添加一系列日期值的列df来扩展Date。应该基于ID重复日期列。因此结果将如下所示:


> df_new
  ID value  Date
1  A     1  2017-4-1
2  A     1  2017-4-2
3  A     1  2017-4-3
1  B     2  2017-4-1
2  B     2  2017-4-2
3  B     2  2017-4-3
1  C     3  2017-4-1
2  C     3  2017-4-2
3  C     3  2017-4-3

我发现此post与我的问题类似,但是解决方案不适用于我的问题。以下是我尝试使用tidyr的内容:


date <- c(seq(as.Date('2017-4-1'),as.Date('2017-4-3'), by = "days"))

df_new <- df %>% group_by(ID) %>% 
                 mutate(Date = date)

Error: Column `Date` must be length 1 (the group size), not 3

有什么想法吗?预先感谢。

1 个答案:

答案 0 :(得分:2)

df %>% left_join(expand.grid(ID = unique(df$ID), date = date))
# Joining, by = "ID"
#   ID value       date
# 1  A     1 2017-04-01
# 2  A     1 2017-04-02
# 3  A     1 2017-04-03
# 4  B     2 2017-04-01
# 5  B     2 2017-04-02
# 6  B     2 2017-04-03
# 7  C     3 2017-04-01
# 8  C     3 2017-04-02
# 9  C     3 2017-04-03

expand.grid是经典的base函数,用于生成所有组合。您可以将其替换为tidyr::crossing以获得相同的结果。