r - 如何转换存储为两列(开始、结束)的日期范围以创建新的行索引并填充值

标签 r time dplyr time-series

这个问题在这里已经有了答案:





Expand rows by date range using start and end date

(5 个回答)


2年前关闭。




我想将存储为两列(开始,结束)+ 值的日期范围转换为仅包含日期和值的两个新列。

我的数据:

    id     end          start        value
1   4421   2014-01-01   2014-01-03   10
2   4421   2014-01-04   2014-01-04   500
3   4421   2014-01-05   2014-01-07   20
4   5560   2014-01-02   2014-01-03   100
5   5560   2014-01-04   2014-01-04   600

我想要的是:
    Date         id     value
0   2014-01-01   4421   10
1   2014-01-02   4421   10
2   2014-01-03   4421   10
3   2014-01-04   4421   500
4   2014-01-05   4421   20
5   2014-01-06   4421   20
6   2014-01-07   4421   20
7   2014-01-01   5560   NA
8   2014-01-02   5560   100
9   2014-01-03   5560   100
10  2014-01-04   5560   600

我正在使用 dplyr,所以我可以使用 mutate 和管道等的东西会很有用。

样本数据:
id <- c(4421, 4421, 4421, 5560, 5560)
start <- c('2014-01-01','2014-01-04','2014-01-05','2014-01-02','2014-01-04')
end = c('2014-01-03','2014-01-04','2014-01-07','2014-01-03','2014-01-04')
value <- c(10,500,20,100,600)
my_data <- data.frame(id,start,end,value)

仅供引用,有一个非常similar question in python ,但我正在使用 R。

编辑:格式化
编辑 2:这是一个副本,原始帖子中有一些很棒的东西。

谢谢@www,我喜欢一路上都有管道。 @Wen-Ben 感谢 Pandas 的提示,我将来可能会使用 Pandas。

最佳答案

使用 tidyverse 的解决方案.不确定为什么在您的预期输出中,id 5560有NA2014-01-01因为它不在那里。

library(tidyverse)

my_data2 <- my_data %>%
  mutate(start = as.Date(start), end = as.Date(end)) %>%
  mutate(Date = map2(start, end, ~seq(from = .x, to = .y, by = "day"))) %>%
  unnest() %>%
  select(Date, id, value) 
my_data2
#          Date   id value
# 1  2014-01-01 4421    10
# 2  2014-01-02 4421    10
# 3  2014-01-03 4421    10
# 4  2014-01-04 4421   500
# 5  2014-01-05 4421    20
# 6  2014-01-06 4421    20
# 7  2014-01-07 4421    20
# 8  2014-01-02 5560   100
# 9  2014-01-03 5560   100
# 10 2014-01-04 5560   600

关于r - 如何转换存储为两列(开始、结束)的日期范围以创建新的行索引并填充值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54846028/

相关文章:

r - 在 dplyr 中对新分配的变量执行操作的最佳方法是什么?

r - 如何添加文本标签以显示ggplot中堆叠比例条的每个条中的总数n?

r - 如何在 ggplot2 中按时间顺序排列月份而不是写出月份?

r - 代入计算结果

R:合并同一data.frame中的行

time - 如何获取两个日期之间的小时差

javascript - 如果事件没有发生jquery/javascript,如何记录 react 时间?

r - tidyverse,plyr和dplyr

.net - 不断更新 Windows 窗体上的当前时间显示?

r - 在 dplyr 的 mutate 中应用过滤器时保持 group_by 完好无损