[問題] grepl與迴圈使用

作者: huangsam (sam)   2016-10-17 16:20:52
[問題類型]:
效能諮詢(我想讓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
作者: clansoda (小笨)   2016-10-17 17:27:00
Hi,所以DT裡面是正則表示式而DT2裡面應該是本值囉lapply(DT[,1],function(k) {grep(k,DT2$whatever)}我猜你是想知道DT的正則表示式能符合DT2的哪些值我這個寫法就不需要包兩個loop這麼麻煩了,每個list的elelement都是符合DT裡面正則表示式的rownumber阿,我lapply忘記用 )包起來,要加進去才能用例如DT2有一個值符合兩種正則表示式,則使用順位在前的作為該值的編號嗎?
作者: celestialgod (天)   2016-10-17 20:50:00
clansoda最後會變成要有很多data.table組起來那樣會相對不方便很多,建議還是用set做
作者: clansoda (小笨)   2016-10-17 23:27:00
我的前提是用dataframe做拉XDD,我沒用datatable做

Links booklink

Contact Us: admin [ a t ] ucptt.com