如何解决我需要通过在R的两行之间的日期填充另一列中的值来拉长数据集
我不确定是否已经问过这个问题,但我找不到。我有以下类型的数据集:
set.seed(1)
d1 <- data.frame(open = rnorm(5),Y = as.Date(c("2020-05-01","2020-05-08","2020-05-15","2020-05-22","2020-05-29")),region = c("a","a","a"))
+------------+------------+--------+--+--+
| open | Y | region | | |
+------------+------------+--------+--+--+
| -0.6264538 | 2020-05-01 | a | | |
| 0.1836433 | 2020-05-08 | a | | |
| -0.8356286 | 2020-05-15 | a | | |
| 1.5952808 | 2020-05-22 | a | | |
| 0.3295078 | 2020-05-29 | a | | |
+------------+------------+--------+--+--+
现在我想把它变成
open<-c(rep(d1[1,1],times=7),rep(d1[2,rep(d1[3,rep(d1[4,rep(d1[5,times=7))
Y<-seq(from = as.Date("2020-05-01"),to = as.Date("2020-06-04"),by="days")
或
+------------+------------+--+--+--+
| open | date | | | |
+------------+------------+--+--+--+
| -0.6264538 | 2020-05-01 | | | |
| -0.6264538 | 2020-05-02 | | | |
| -0.6264538 | 2020-05-03 | | | |
| -0.6264538 | 2020-05-04 | | | |
| -0.6264538 | 2020-05-05 | | | |
| -0.6264538 | 2020-05-06 | | | |
| -0.6264538 | 2020-05-07 | | | |
| 0.1836433 | 2020-05-08 | | | |
| 0.1836433 | 2020-05-09 | | | |
| 0.1836433 | 2020-05-10 | | | |
+------------+------------+--+--+--+
因此,基本上,我有几周开始的数据。 “开放”变量也适用于两周之间的每个日期,因此我想在某种意义上填写并“延长”数据。
此外,我也需要按组(在区域中)这样做
解决方法
使用tidyr
和dplyr
,您可以填写日期,然后填写。
library(tidyr)
library(dplyr)
d1 %>%
group_by(region) %>%
complete(Y = seq.Date(min(Y),max(Y),by = "day")) %>%
fill(open,.direction = "down")
,
尝试使用此方法创建具有日期序列的数据框,然后使用tidyverse
函数进行合并,并完成NA
值。这里的解决方案代码接近您想要的:
library(tidyverse)
#Code for dates
dfdates <- data.frame(Y=seq(min(d1$Y),max(d1$Y),by=1))
#Join and fill
newd1 <- dfdates %>%
left_join(d1) %>%
fill(open) %>% select(-region)
输出:
Y open
1 2020-05-01 -0.6264538
2 2020-05-02 -0.6264538
3 2020-05-03 -0.6264538
4 2020-05-04 -0.6264538
5 2020-05-05 -0.6264538
6 2020-05-06 -0.6264538
7 2020-05-07 -0.6264538
8 2020-05-08 0.1836433
9 2020-05-09 0.1836433
10 2020-05-10 0.1836433
11 2020-05-11 0.1836433
12 2020-05-12 0.1836433
13 2020-05-13 0.1836433
14 2020-05-14 0.1836433
15 2020-05-15 -0.8356286
16 2020-05-16 -0.8356286
17 2020-05-17 -0.8356286
18 2020-05-18 -0.8356286
19 2020-05-19 -0.8356286
20 2020-05-20 -0.8356286
21 2020-05-21 -0.8356286
22 2020-05-22 1.5952808
23 2020-05-23 1.5952808
24 2020-05-24 1.5952808
25 2020-05-25 1.5952808
26 2020-05-26 1.5952808
27 2020-05-27 1.5952808
28 2020-05-28 1.5952808
29 2020-05-29 0.3295078
如果您需要按region
分组,可以先填充变量,然后使用group_by()
并完成open
变量来完成:
#Join and fill 2
newd1 <- dfdates %>%
left_join(d1) %>%
fill(region) %>%
group_by(region) %>%
fill(open)
输出:
# A tibble: 29 x 3
# Groups: region [1]
Y open region
<date> <dbl> <fct>
1 2020-05-01 -0.626 a
2 2020-05-02 -0.626 a
3 2020-05-03 -0.626 a
4 2020-05-04 -0.626 a
5 2020-05-05 -0.626 a
6 2020-05-06 -0.626 a
7 2020-05-07 -0.626 a
8 2020-05-08 0.184 a
9 2020-05-09 0.184 a
10 2020-05-10 0.184 a
# ... with 19 more rows
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。