gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:47:11 25 4
gpt4 key购买 nike

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





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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com