【问题标题】:Merge and expand a dataframe by group按组合并和扩展数据框
【发布时间】:2023-04-05 07:30:01
【问题描述】:

假设我有一个这样的数据框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

我想通过添加一系列日期值的列Date 来扩展df。日期列应根据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

有什么想法吗?提前致谢。

【问题讨论】:

    标签: r dataframe


    【解决方案1】:
    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 以获得相同的结果。

    【讨论】:

    • 谢谢!非常简洁的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2019-09-18
    相关资源
    最近更新 更多