1
我仍然试图理解R中的函数,比如apply,lapply等。就我所知,R中的循环很慢,避免它们是一种很好的做法。然而,做一切事情的'单线脚本'是非常困难的。尽管如此,我仍然想忘掉循环并切换到快速启动功能。 我的输入数据 - 两个表:嵌套的lapply来修改表格而不是循环
L1
N Q string
1 12 NNN|ABC|12.5
2 46 DEF|111|!-2
3 34 $$%GHI|--+
4 -2 345H*(JKL
5 50 NK-|224ABC
6 0 NNNNNNNNN
和L2
str
ABC
DEF
GHI
JKL
MNO
PRS
什么我想要得到:
N Q string sub
1 12 NNN|ABC|12.5 ABC
2 46 DEF|111|!-2 DEF
3 34 $$%GHI|--+ GHI
4 -2 345H*(JKL JKL
5 50 NK-|224ABC ABC
6 0 NNNNNNNNN NA
正如你看到的具体苏bstring是从字符串中提取的(非常随机,里面没有任何模板),并分别添加在每行的末尾。
我在R中创建了一个简短的脚本,它允许这样做,但在我的非假数据表中,L1有超过80000行,表L2超过250000行,所以这个简单的操作可能需要一点时间。
L1 <- cbind(sub=NA,L1)
L1 <- subset(L1, select=c(N:string,sub))
for(i in 1:nrow(L2)){
for(j in 1:nrow(L1)){
if(grepl(L2[i,1], L1[j,3])){
L1$sub[j] <- toString(L2$str[i])
}
}
}
我在想嵌套lapply,但我怎么才能到达具体的索引? 超伪代码:
lapply(L1, function(x) lapply(L2, function(y) if(L2 in L1) add L2 to L1 else add NA))
啤酒和巨大的感谢任何线索。
如果要解释这样一种可能性,在L1的字符串可以匹配L2不止一个模式(例如'L1 $字符串[1] < - “NNN | ABC你可以使用'str_extract_all':'L1 $ sub < - stringr :: str_extract_all(L1 $ string,paste(L2 $ str,collapse =“|”))%> lapply(粘贴,折叠=“,”)%>%unlist%>%replace(。,。==“”,NA)'。 – ikop
啊,真是太神奇了:D – Adamm
我只想补充一件事。在对我的解决方案和上面给出的解决方案稍作修改后,我在我的数据上运行了两个脚本,并测量了时差:我的解决方案:**时差48.31354分钟**给定解决方案:**时差30.6875秒**。再一次,非常感谢! – Adamm