在r中如何将数据从一个数据帧输入到另一个数据帧

在r中如何将数据从一个数据帧输入到另一个数据帧,r,dplyr,lubridate,R,Dplyr,Lubridate,我有两个数据帧df1和df2 df1= data.frame( ts = c('2020-01-15', '2020-01-16' , '2020-01-17', '2020-01-20', '2020-01-22','2020- 01-24','2020-01-27','2020-01-30','2020-01-31'), lla=c(12,13,14,15,16,17,18,19,20),

我有两个数据帧df1和df2

df1= data.frame( ts = c('2020-01-15', '2020-01-16' , '2020-01-17', '2020-01-20', '2020-01-22','2020- 
                         01-24','2020-01-27','2020-01-30','2020-01-31'),
              lla=c(12,13,14,15,16,17,18,19,20),
              llb=c(1,2,3,4,6,5,9,8,7),
              llc=c(0.6,1.6,2.6,3.6,4.6,5.6,6.6,7.6,8.6),
              lld=c(10,11,12,13,14,15,16,154,167))

df2= data.frame( ts = c('2020-01-17','2020-01-24','2020-01-31'),
             lla=NA,llb=NA,llc=NA,lld=NA)
如果df2$ts的日期与df1$ts匹配,它将回顾4天前的情况,并计算df2中每列的最大值

例如:

df2$ts的第一个值为“2020-01-17”,与df1$ts匹配。。它将回顾4天,这意味着它将过滤掉2020-01-13到2020-01-17之间df1$ts的数据,因此我们得到

#code
df1[(as.Date(df1$ts)>= (as.Date(df2[1,1])-2)) &
   (as.Date(df1$ts)<= (as.Date(df2[1,1]))),]
#i am writing this in a loop so that it would iterate over every date of df2

df1= data.frame( ts = c('2020-01-15', '2020-01-16' , '2020-01-17'),
              lla=c(12,13,14),
              llb=c(1,2,3),
              llc=c(0.6,1.6,2.6),
              lld=c(10,11,12))
#代码
df1[(截止日期(df1$ts)>=(截止日期(df2[1,1])-2))&
(截止日期(df1$ts)=(截止日期(cls[1,1])-2))&

(as.Date(ohlc$ts)在4天前创建一个新列后,这里有一个带有
roll
的选项

library(data.table)
library(lubridate)
# // convert columns to Date class
df1$ts <- as.Date(df1$ts)
df2$ts <- as.Date(df2$ts)
nm1 <- names(df2)[-1]
# // change the type of NA columns from logical to numeric
setDT(df2)[, (nm1) := lapply(.SD, as.numeric), .SDcols = nm1]

# // subtract 4 days from ts to create ts1
setDT(df1)[, ts1 := ts %m-% days(4)]

# do a rolling join while getting the `max` for each column
df2[df1, (nm1) := lapply(mget(paste0("i.", nm1)), max), 
           on = .(ts = ts1), roll = -Inf, by = .EACHI]
库(data.table)
图书馆(lubridate)
#//将列转换为日期类

df1$ts在4天前创建新列后,这里有一个带有
roll
的选项

library(data.table)
library(lubridate)
# // convert columns to Date class
df1$ts <- as.Date(df1$ts)
df2$ts <- as.Date(df2$ts)
nm1 <- names(df2)[-1]
# // change the type of NA columns from logical to numeric
setDT(df2)[, (nm1) := lapply(.SD, as.numeric), .SDcols = nm1]

# // subtract 4 days from ts to create ts1
setDT(df1)[, ts1 := ts %m-% days(4)]

# do a rolling join while getting the `max` for each column
df2[df1, (nm1) := lapply(mget(paste0("i.", nm1)), max), 
           on = .(ts = ts1), roll = -Inf, by = .EACHI]
库(data.table)
图书馆(lubridate)
#//将列转换为日期类
df1$ts尝试:

libray(dplyr)
df1%变异(ts=截止日期(ts))
df2%突变(ts=截止日期(ts))
my_函数%filter(ts>=(x$ts-3)&ts%
突变(ts=x$ts)%>%
总结(跨越(.cols=lla:lld,.fns=max))%>%
突变(ts=x$ts)}
lappy(split(df2,df2$ts),my_函数,df=df1)%>%do.call(rbind,.)
试试:

libray(dplyr)
df1%变异(ts=截止日期(ts))
df2%突变(ts=截止日期(ts))
my_函数%filter(ts>=(x$ts-3)&ts%
突变(ts=x$ts)%>%
总结(跨越(.cols=lla:lld,.fns=max))%>%
突变(ts=x$ts)}
lappy(split(df2,df2$ts),my_函数,df=df1)%>%do.call(rbind,.)

使用
runner的备用进近

df1$ts lla llb llc lld
#> 1 2020-01-17  14   3 2.6  12
#> 2 2020-01-24  17   6 5.6  15
#> 3 2020-01-31  20   8 8.6 167

于2021-06-06由(v2.0.0)

使用
runner的备用进近创建

df1$ts lla llb llc lld
#> 1 2020-01-17  14   3 2.6  12
#> 2 2020-01-24  17   6 5.6  15
#> 3 2020-01-31  20   8 8.6 167
由(v2.0.0)于2021-06-06创建

libray(dplyr)
df1 <- df1 %>% mutate(ts=as.Date(ts))
df2 <- df2 %>% mutate(ts=as.Date(ts))

my_function <- function(x,df){
      df %>% filter(ts >= (x$ts-3) &  ts <= x$ts) %>%
            mutate(ts=x$ts) %>%
            summarise(across(.cols = lla:lld, .fns = max)) %>%
            mutate(ts=x$ts)}

lapply(split(df2,df2$ts),my_function,df=df1) %>% do.call(rbind,.)