2016-11-05 71 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