我有兩個表格:df.author和df.post,它們通過一對多關係相關。現在我更改了主鍵df.author,並且我想要df.post來鏡像更改。在下列R-腳本我用match()
在while
循環與df.author的舊的主鍵來比較每一行的外鍵df.post和當他們與新的匹配替換外鍵一個(形成不同的列df.author)。請考慮以下幾點:比較兩個向量一次一個值而不使用WHILE
foreignkey <- c("old_pk1","old_pk2","old_pk3","old_pk4","old_pk5","old_pk1","old_pk7")
df.post <- data.frame(foreignkey,stringsAsFactors=FALSE)
rm(foreignkey)
primarykey_old <- c("old_pk1","old_pk2","old_pk3","old_pk4","old_pk5")
primarykey_new <- c("new_pk1","new_pk2","new_pk3","new_pk4","new_pk5")
df.author <- data.frame(primarykey_old, primarykey_new, stringsAsFactors=FALSE);
rm(primarykey_old); rm(primarykey_new)
i <- 1; N <- length(df.post$foreignkey)
while (i <= N) {
match <- match(df.post$foreignkey[i], df.author$primarykey_old)
if (!is.na(match)) {
df.post$foreignkey[i] <- df.author$primarykey_new[match]
}
i <- i + 1
}
rm(N); rm(i); rm(match)
腳本工作,但由於while
不適合大數據集高效擴展。我讀過使用apply()
(在我的情況下通過轉換爲矩陣)通常比使用while
更好。我想知道這是否也適用於我的情況。因爲如果你看看你看到的循環,我需要遍歷數據幀的每一行以獲取外鍵,然後通過df.author獲得match()
。 我可以通過不使用while
來壓縮計算時間嗎?
這是拼寫錯誤:'as.Character'。如果這確實存在一個多種可能性的問題,那麼您可以構建一個展示該特徵的數據集 –
對不起,該行由'stringsAsFactors = FALSE'冗餘' – CptNemo
第二個問題仍未解決。我懷疑它使我所給的答案無效,但現在您有責任構建一個反例。 –