2016-11-05 3 views
2

Dies ist mein Datenrahmenlapply mit zwei Säulen Argumenten

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') 

Ich mag eine Liste erstellen, indem Sie eine Schleife als jede Zeile in df tun und alle Zeilen aus ab wählen, wo ab$Date größer als df$Date und kleiner als df$NextDate so dass die Ausgabe wie folgt aussieht:

[[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 

Dies ist mein Versuch:

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

Antwort

1

Erstellen Sie einen Vektor, der prüft, ob Zeilen von ab Ihre Bedingungen erfüllen, und verwenden Sie sie dann, um Zeilen von ab auszuwählen.

+0

Dank für Ihre Antwort danken! – gibbz00

+0

Gern geschehen. Sie können mir besser danken, indem Sie meine Antwort aufheben und auswählen! – rsoren

2

Es ist möglich, dass dies nicht wirklich in den Datenrahmen Traditionen ist, aber ich denke, die Logik ist ziemlich klar, wenn Sie von einem Basis-R-Hintergrund kommen. Die data.table „[“ Funktion muss in einer Liste nicht notierte Spaltennamen haben nur Spaltenwerte delive:

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

Vielen Dank für Ihre Antwort! – gibbz00

2

Sie können sich bewerben verwenden:

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

Vielen Dank für Ihre Antwort! – gibbz00