提供一个我觉得有点酷的方法~~用sweep做 (我直接根据andrew大大改的)
tEyedata = matrix(c(0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,1,2,1,2,1,2,1,2,5,7,6,
  8,7,8,9,10,3,7,4,1),12,3)
pN = matrix(c(0,0,1,2,6,7),2,3)
out = vector('list', nrow(pN))
for (i in 1:nrow(pN)){
  tmp = sweep(tEyedata, 2, pN[i,], '-')
  out[[i]] = tEyedata[which(tmp[,1] == 0 & tmp[,2] == 0 & tmp[,3] < 0),]
}
(out_all = do.call(rbind, out))
out_all即为所求
其中sweep是一个很方便的function
可以matrix(第一个input)对vector(第三个input)做运算
行或列则以第二个input做判断
(根本只是想偷渡sweep....
sweep向量运算版:
tEyedata <-
matrix(c(0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,1,2,1,2,1,2,1,2,5,7,6,8,7,8,
  9,10,3,7,4,1),12,3)
pN <- matrix(c(0,0,1,2,6,7),2,3)
out = vector('list', nrow(pN))
for (i in 1:nrow(pN))
  out[[i]] = tEyedata[sweep(tEyedata, 2, pN[i,], function(x, y){
    x[,1] == y[,1] & x[,2] == y[,2] &  x[,3] < y[,3]
  }),]
(out_all = do.call(rbind, out))
※ 引述《elone (Next Step)》之铭言:
:   不好意思 小弟是一个新入门的菜逼巴 平常只会写 C
:   小弟有一个要做多重 filter 的问题...
:   前言
:   事情是这样的 我们想针对不同的使用者与其不同的判断条件去删资料
:   ex
:   source file (因为变量很长所以用ABC 来代替)
:   tEyedata
:         C1  C2  C3
:     A   0   1   5
:     A   0   1   7
:     A   0   2   6
:     A   0   2   8
:     B   0   1   7
:     B   0   2   8
:     C   0   1   9
:     C   0   2   10
:   Filter file
:   pN
:        C1  C2   C3
:     A  0   1    6
:     A  0   2    7
:     B ...
:     C  ..
:     ...
:     我们要逐一比对  tEyedata C1 C2 和 pN C1 C2 是否有一样
:   如果一样的话 再去看 tEyedata$C3  是否有 >= pN$C3
:     如果有的话 就会把这笔record 拿掉
:     如果没有的话 就会留下这笔 record
:     就结果来说应该 tEyedata 会变成
:       C1  C2   C3
:    A  0   1    5
:    A  0   2    6
:    B  ..
:    但是我们的code 都会拿光光 QAQ ... 卡了2天了啊啊啊
:    #read prune file
:   tEyedata <- read.table("Eye.txt",header=T)
:    pN <- read.table("Eye/Eye_Prune.txt",header=T)
:     for(i in 1:nrows(tEyedata))
:     {
:       for(j in 1:nrows(pN))
:       {
:         if(tEyedata$subject[[i]] == pN$subejct[[j]] & C1 = C1 & D1 = D1 )
:         {
:           tEyedata <- subset(tEyedata, tEyedata$C3 <= pN$C3[[j]] )
:         }
:       }
:     }
:     但是他都会把不该拿掉的东西拿掉 我好苦恼啊
:   希望有大大可以来救我
:   谢谢