使用colum中的value作为函数中的参数

时间:2017-11-06 07:20:54

标签: r

我有两个数据框,一个带有一个包含3个索引变量的列表:User,Log和Pass,其中一个数据框的每个变量都有很多值。

我试图将大DF中的许多值传递到较小DF中的列表中,以便稍后我可以执行汇总统计。

Small.DF
User,Log,Pass,Valid.Event.Pass
1   11  76  Yes
1   11  46  Yes
1   15  38  Yes
1   15  47  Yes
1   15  386 Yes
1   15  388 Yes
1   8   119 Yes
1   8   120 Yes
1   8   121 Yes
1   8   122 Yes
1   8   123 Yes
1   16  35  Yes
1   16  37  Yes
1   17  22  Yes
1   17  102 Yes
1   12  203 Yes
1   12  205 Yes
1   12  207 Yes
1   12  209 Yes
1   12  24  Yes
2   13  29  Yes
2   1   31  Yes


Big.DF
     User,Log,Pass,Passing.Distance
    1   11  0   739.5
    1   11  0   411.5
    1   11  0   0
    1   11  0   739.5
    1   11  0   0
    1   11  0   739.5
    1   11  0   0
    1   0   0   739.5
    1   0   0   0
    1   0   0   739.5
    1   0   0   0
    1   0   0   739.5
    1   0   0   0
    1   0   0   739.5
    1   15  76  371.5
    1   15  76  371.5
    1   15  76  370.5
    1   15  767 368.5
    1   15  76  367.5
    1   15  76  366.5
    1   15  76  365.5
    1   15  76  364.5
    1   15  76  364.5
    1   15  76  363.5
    1   15  76  364.5
    1   15  76  0
    1   15  76  739.5
    1   15  76  369.5
    1   15  76  0
    1   15  76  739.5
    1   15  0   0
    1   15  0   739.5
    1   15  0   0
    1   15  0   739.5
    1   15  0   0
    1   15  0   739.5
    1   15  0   0
    1   15  0   739.5
    1   15  0   0
    1   15  0   739.5
    1   15  0   0
    1   15  0   739.5
    1   15  0   0

我对在Big.DF中对这三个变量匹配的值进行子集化感兴趣,但对之前的100个值以及之后的100个值也感兴趣。

为实现这一目标,我已经编写了一个能够创建这样一个列表的函数:

newfn<- function(User,Log,Pass){
test<-subset(Sensor.Data[(min(which(Big.DF$User==User&Big.DF$Log==Log & Big.DF$Pass==Pass))-100):(max(which(Big.DF$User==User&Big.DF$Log==Log & Big.DF$Pass==Pass))+100),],select=Passing.Distance)
}

但我无法弄清楚如何在smalldf中的每一行上应用此函数。

我能想到的最简单的解释是

Small.df$listofvalues<- newfn(Small.df$User,Small.df$Log,Small.df$Pass)

但是由于我可以看到的几个原因,这不会起作用....

如果它适用,它将是这样的

Small.df$listofvalues<-apply(smalldf,1,newfn)

但这并不是很有效......而且扫描似乎也不对。我有什么功能吗?

1 个答案:

答案 0 :(得分:0)

想出来......

  rowfinder<- function(User,Log,Pass){
    subset(Sensor.Data[(min(which(Sensor.Data$User==User&Sensor.Data$Log==Log & Sensor.Data$Pass==Pass))-100):(max(which(Sensor.Data$User==User&Sensor.Data$Log==Log & Sensor.Data$Pass==Pass))+100),],select=LH.passing.distance)
  }
  SmallDF$LHvalues<-apply(SmallDF[,c('User','Log','Pass')], 1, function(y) rowfinder(y['User'],y['Log'],y['Pass']))