例如,我有以下数据框(df1):
Date Price
2020-01-01 500
2020-01-02 550
2020-01-03 480
2020-01-04 420
2020-01-07 450
2020-01-08 390
2020-01-09 430
2020-01-11 480
2020-01-12 490
2020-01-13 485
并且我想在上一个数据帧中插入“ Prince2”列,以便我重复该行直到下一个日期,但是此“下一个日期”不在df1数据帧上:
Date Price2
2020-01-05 50
2020-01-10 20
2020-01-13 90
会是这样:
Date Price Price2
2020-01-01 500 50
2020-01-02 550 50
2020-01-03 480 50
2020-01-04 420 50
2020-01-07 450 20
2020-01-08 390 20
2020-01-09 430 20
2020-01-11 480 90
2020-01-12 490 90
2020-01-13 485 90
有人可以帮我吗?
[这里是tidyverse
和tidyr::fill
的方法:
library(dplyr)
library(tidyr)
full_join(df1,df2) %>%
arrange(Date) %>%
tidyr::fill(Price2,.direction = "up") %>%
dplyr::filter(!is.na(Price))
Date Price Price2
1 2020-01-01 500 50
2 2020-01-02 550 50
3 2020-01-03 480 50
4 2020-01-04 420 50
5 2020-01-07 450 20
6 2020-01-08 390 20
7 2020-01-09 430 20
8 2020-01-11 480 90
9 2020-01-12 490 90
10 2020-01-13 485 90
假定具有Price2
的第二个数据帧称为df2
:
library(magrittr)
lapply(df2$Date,function(x){
df2$Price2 * (df1$Date < x)
}) %>%
do.call(what = "+")
它应该工作,如果没有请通知我。