2013-08-26 49 views
0

我想這是R用戶中非常常見的問題,但對我而言仍然不清楚。我想解析列fnl3 $ aaa的所有元素,併爲它們中的每一個執行df $ aaa列中的查找。如果發生匹配,則在臨時向量的末尾附加一個數值。我的問題是這個過程需要很長時間才能完成。所以我想知道如何讓它運行得更快。有任何想法嗎?如何避免R中的for-loops

cur <- c("") 
for (i in 1:unq21) { 
    prev <- cur 
    for (j in 1:unq11) { 
     if (cnt1$aaa[j] == fnl3$aaa[i]) { 
     print('MATCH!!!') 
     print(cnt1$freq[j]) 
     print(fnl3$V1[i]) 
     cur <- append(prev, as.vector(fnl3$V1[i]/cnt1$freq[j]), after = 0) 
     } 
    } 
} 

樣本數據集:

fnl3 
    row.names aaa         V1 
1 404  1DC8F216-9138-4151-ABD6-36C3C2C75001  3 
2 1533 638DF397-359E-43A5-A2F7-2C43CABA93DA  3 
3 14  015ee60dbf299f5419eed89214b7409a   2 
4 98  08CFF963-5565-4B8C-814E-FDFA5D37DCD6  2 
5 488  226afbbac8dfd6f3c27cb16f9d7922a2   2 

cnt1 
    aaa           freq 
1 000089f457881d57d4f221948c2b808c   1 
2 00081dd2fd542a2a9c64a8990a1fc986601ab318 1 
3 0021a8971f976743c2043b60e38eab46   1 
4 0034d5d368611e33d7cfcda85df96eba   1 
5 00379FA3-07A6-4AF7-ACBC-721E2E33DD67  1 
+0

我們展示您的數據。你正在尋找的一般過程可能是'ifelse(fnl3 $ aaa%in%df $ aaa,#do something#,#elsese else#)'。 – Thomas

+0

我也引用了一個示例數據集。你可以有一個廁所嗎? – user2295350

+0

什麼是'unq11'和'unq21'? – Thomas

回答

2

首先,使用merge建立一個data.frame其中aaa列相匹配:

m <- merge(fnl3, cnt1, by = "aaa") 

然後,你可以計算的是矢量你儲存在cur通過簡單地做:

with(m, V1/freq) 

你可以做到這一切在一個電話:

with(merge(fnl3, cnt1, by = "aaa"), V1/freq)