精華區beta R_Language 關於我們 聯絡資訊
提供一個我覺得有點酷的方法~~用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]] ) : } : } : } : 但是他都會把不該拿掉的東西拿掉 我好苦惱啊 :   希望有大大可以來救我 :   謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.248.13.191 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1436954001.A.0C6.html
andrew43: 有偷學有推。07/15 18:04
cywhale: got one tip! thanks ^^ 07/15 22:40
obarisk: 一個cat和一個比較也可以啊 07/15 23:10
obarisk: all.equal也許也可以 07/15 23:11
※ 編輯: celestialgod (111.248.13.191), 07/15/2015 23:36:00
elone: 有學有推 07/16 10:19
Edster: push 07/16 14:48