假设我有一个像这样的数据框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
有什么想法吗?预先感谢。
答案 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
以获得相同的结果。