这些是我的数据框
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$Date
大于df$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)
这是我的尝试:
t1 = CGAffineTransformMakeTranslation(assetVideoTrack.naturalSize.height, 0.0);
// Rotate transformation
t2 = CGAffineTransformRotate(t1, degreesToRadians(90.0));
答案 0 :(得分:2)
这可能不是数据框架中的真正传统,但我认为如果你来自base-R背景,那么逻辑就相当清楚了。 data.table&#34; [&#34;函数需要在列表中包含不带引号的列名,以便只提供列值:
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
答案 1 :(得分:2)
您可以使用apply:
apply(df, 1, function(x) ab[ab$Date>x[2] & ab$Date<x[3],])
答案 2 :(得分:1)
创建一个向量,检查ab
行是否符合您的条件,然后使用它来选择ab
行。
lapply(1:nrow(df), function(x) {
ab[which(ab$Date > df[x, get("Date")] & ab$Date < df[x, get("NextDate")]), ]
})