假设我有一个这样的数据帧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有什么想法吗?提前谢谢。
发布于 2019-04-19 02:55:08
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-03expand.grid是生成所有组合的经典base函数。您可以将其替换为tidyr::crossing,以获得相同的结果。
https://stackoverflow.com/questions/55752168
复制相似问题