[問題] grepl與迴圈使用

看板R_Language作者 (sam)時間9年前 (2016/10/17 16:20), 9年前編輯推噓3(308)
留言11則, 2人參與, 最新討論串1/2 (看更多)
[問題類型]: 效能諮詢(我想讓R 跑更快) [軟體熟悉度]: 請把以下不需要的部份刪除 入門(寫過其他程式,只是對語法不熟悉) [問題敘述]: 請簡略描述你所要做的事情,或是這個程式的目的 手上有兩個檔案,分別是參照表以及原始檔 其中一個參照表為 EX: 檔案DT 1 ^123.* A 2 ^234.* B . . . 原始檔為 檔案DT2 1. 123456 2. 23456 經由比對可以發現 1.=>為A 2.=>為B [你的答案]: 我的寫法是用迴圈方式然後 想請問有沒有更好的寫法 ansewer <- c() for (i in 1:nrow(DT)) { ind <- grepl(DT[i, 1, with=F], DT2) for(j in which(ind==1)) { ansewer[j] <- ifelse(TYPE[j]==0, DT2[i],ansewer[j] ) } } [關鍵字]: grepl -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.51.170.56 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1476692454.A.C19.html ※ 編輯: huangsam (123.51.170.56), 10/17/2016 16:27:14 ※ 編輯: huangsam (123.51.170.56), 10/17/2016 16:27:56

10/17 17:27, , 1F
Hi,所以DT裡面是正則表示式而DT2裡面應該是本值囉
10/17 17:27, 1F

10/17 17:29, , 2F
lapply(DT[,1],function(k) {grep(k,DT2$whatever)}
10/17 17:29, 2F

10/17 17:29, , 3F
我猜你是想知道DT的正則表示式能符合DT2的哪些值
10/17 17:29, 3F

10/17 17:29, , 4F
我這個寫法就不需要包兩個loop這麼麻煩了,每個list的el
10/17 17:29, 4F

10/17 17:30, , 5F
element都是符合DT裡面正則表示式的rownumber
10/17 17:30, 5F

10/17 17:31, , 6F
阿,我lapply忘記用 )包起來,要加進去才能用
10/17 17:31, 6F
我是想要知道它裡面有哪些值沒錯,但是有個條件如果之前有比對出來就以先比對出來 的為主,所以才會多個迴圈判斷。 若是grepl(DT[i, 1, with=F], DT2)有多個條件有比較好的寫法嗎? 我是用grepl(DT[i, 1, with=F], DT2_1)*grepl(DT[i, 2, with=F], DT2_2),表示 兩個條件都要符合才可以 ※ 編輯: huangsam (123.51.170.56), 10/17/2016 17:47:46

10/17 17:56, , 7F
例如DT2有一個值符合兩種正則表示式,則使用順位在前的
10/17 17:56, 7F

10/17 17:56, , 8F
作為該值的編號嗎?
10/17 17:56, 8F
順序在前面且之前沒有被比對出來 EX: A在1.3.5.7有比對出來就是A B在1.4.9 因為1前面有比對出來A所以這次只有4.9是B ※ 編輯: huangsam (123.51.170.56), 10/17/2016 18:14:54

10/17 20:50, , 9F
clansoda最後會變成要有很多data.table組起來
10/17 20:50, 9F

10/17 20:50, , 10F
那樣會相對不方便很多,建議還是用set做
10/17 20:50, 10F

10/17 23:27, , 11F
我的前提是用dataframe做拉XDD,我沒用datatable做
10/17 23:27, 11F
文章代碼(AID): #1O18dcmP (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1O18dcmP (R_Language)