我有一个数据框precip_range
:
start_date<-as.Date(c("2010-4-01", "2010-4-02", "2010-04-04", "2010-07-02", "2010-07-02", "2010-07-03"))
end_date<-as.Date(c("2010-7-01", "2010-07-01", "2010-07-02", "2010-10-03", "2010-10-04", "2010-10-03"))
date_category<-(c("A", "A", "A", "B", "B", "B"))
site <-c("Site 1", "Site 2", "Site 3", "Site 1", "Site 2", "Site 3")
precip_range<-data.frame(site, start_date, end_date, date_category)
precip_range$days <-(end_date-start_date)
我想增加一列Date
用的值,并添加行Date
,填补在日期间的间隙start_date
和end_date
通过site
。除以外的所有列Date
均应保留与中相同的信息precip_range
。我希望结果数据框的前几行看起来类似于数据框result_example
:
date<-as.Date(c("2010-04-01", "2010-04-02", "2010-04-03", "2010-04-04", "2010-04-05", "2010-04-06"))
result_date_category <-c("A", "A", "A", "A", "A", "A")
result_site <-c("Site 1", "Site 1", "Site 1", "Site 1", "Site 1", "Site 1")
result_start_date <-as.Date(c("2010-04-01", "2010-04-01", "2010-04-01", "2010-04-01", "2010-04-01","2010-04-01"))
result_end_date <-as.Date(c("2010-07-01", "2010-07-01", "2010-07-01", "2010-07-01", "2010-07-01","2010-07-01"))
result_example <-data.frame(date, result_site, result_start_date, result_end_date, result_date_category)
result_example$days <-(result_end_date-result_start_date)
我的问题类似于[在R中:将具有前一行数据的行添加到数据框中,但是我无法针对我的情况成功调整该答案。谢谢你。
尝试以下
diffs <- with(precip_range, end_date - start_date + 1)
result_site <- precip_range[rep(seq_len(nrow(precip_range)), diffs), ]
library(data.table)
setDT(result_site)[, Date := seq.int(start_date[1], end_date[1], by = "day"),
by = list(site, date_category)]
result_site
# site start_date end_date date_category days Date
# 1: Site 1 2010-04-01 2010-07-01 A 91 days 2010-04-01
# 2: Site 1 2010-04-01 2010-07-01 A 91 days 2010-04-02
# 3: Site 1 2010-04-01 2010-07-01 A 91 days 2010-04-03
# 4: Site 1 2010-04-01 2010-07-01 A 91 days 2010-04-04
# 5: Site 1 2010-04-01 2010-07-01 A 91 days 2010-04-05
# ---
# 551: Site 3 2010-07-03 2010-10-03 B 92 days 2010-09-29
# 552: Site 3 2010-07-03 2010-10-03 B 92 days 2010-09-30
# 553: Site 3 2010-07-03 2010-10-03 B 92 days 2010-10-01
# 554: Site 3 2010-07-03 2010-10-03 B 92 days 2010-10-02
# 555: Site 3 2010-07-03 2010-10-03 B 92 days 2010-10-03
在这里,我们计算日期差并根据每个差的大小执行行索引。之后,我们使用data.table
软件包添加了日期差(以提高性能)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句