lapply有两个列参数

时间:2016-11-05 23:40:14

标签: r data.table lapply

这些是我的数据框

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中的每一行执行循环来创建列表,然后选择abab$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));

3 个答案:

答案 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")]), ]
})