[问题] 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