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