看板 R_Language 關於我們 聯絡資訊
[問題類型]: 效能諮詢(我想讓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
clansoda: Hi,所以DT裡面是正則表示式而DT2裡面應該是本值囉 10/17 17:27
clansoda: lapply(DT[,1],function(k) {grep(k,DT2$whatever)} 10/17 17:29
clansoda: 我猜你是想知道DT的正則表示式能符合DT2的哪些值 10/17 17:29
clansoda: 我這個寫法就不需要包兩個loop這麼麻煩了,每個list的el 10/17 17:29
clansoda: element都是符合DT裡面正則表示式的rownumber 10/17 17:30
clansoda: 阿,我lapply忘記用 )包起來,要加進去才能用 10/17 17:31
我是想要知道它裡面有哪些值沒錯,但是有個條件如果之前有比對出來就以先比對出來 的為主,所以才會多個迴圈判斷。 若是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
clansoda: 例如DT2有一個值符合兩種正則表示式,則使用順位在前的 10/17 17:56
clansoda: 作為該值的編號嗎? 10/17 17:56
順序在前面且之前沒有被比對出來 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
celestialgod: clansoda最後會變成要有很多data.table組起來 10/17 20:50
celestialgod: 那樣會相對不方便很多,建議還是用set做 10/17 20:50
clansoda: 我的前提是用dataframe做拉XDD,我沒用datatable做 10/17 23:27