2016-11-05 117 views
2

这些是我dataframeslapply两个参数

library(data.table) 
df <- fread(' 
      Account  Date  NextDate 
      A   2016-01-01  2016-02-01 
      A   2016-02-01  2016-11-05 
      B   2016-03-10  2016-11-05') 


ab <- fread(' 
     Date  Amount 
    2015-06-01  55 
    2016-01-31  55 
    2016-02-28  65 
    2016-03-31  75') 

我希望做一个循环中df每行创建一个列表,并挑选所有行ab其中ab$Datedf$Date和小于更大df$NextDate使输出看起来像这样:

[[1]] 

Date  Amount 
2016-01-31 55 

[[2]] 

Date  Amount 
2016-02-28 65 
2016-03-31 75 

[[3]] 
Date  Amount 
2016-03-31 75 

这是我的尝试:

list<- lapply(df$Date, function(x,y) br[Date > x & Date < y ],y=df$NextDate) 

回答

1

创建一个向量,检查ab行是否符合您的条件,然后使用它选择ab的行。

lapply(1:nrow(df), function(x) { 
    ab[which(ab$Date > df[x, get("Date")] & ab$Date < df[x, get("NextDate")]), ] 
}) 
+0

谢谢您的回答! – gibbz00

+0

不客气。你可以通过upvoting和选择我的答案来更好地感谢我! – rsoren

2

这可能不是真正的数据框架传统,但我认为如果您是来自base-R背景,逻辑相当清晰。该data.table“[”功能需要在列表中有不带引号的列名国内配送单纯的列值:

apply(df[, list(Date,NextDate)] , 1, 
     function(dts) ab[ ab$Date > dts['Date'] & ab$Date < dts['NextDate'], ]) 
[[1]] 
     Date Amount 
1: 2016-01-31  55 

[[2]] 
     Date Amount 
1: 2016-02-28  65 
2: 2016-03-31  75 

[[3]] 
     Date Amount 
1: 2016-03-31  75 
+0

谢谢你的回答! – gibbz00

2

您可以使用适用于:

apply(df, 1, function(x) ab[ab$Date>x[2] & ab$Date<x[3],]) 
+0

谢谢你的回答! – gibbz00