我有一個包含+10百萬條記錄(all_postcodes)的數據框。 [編輯]以下是隻有幾個記錄:使用gsub和sapply的R性能問題
pcode area east north area2 area3 area4 area5
AB101AA 10 394251 806376 S92000003 S08000006 S12000033 S13002483
AB101AB 10 394232 806470 S92000003 S08000006 S12000033 S13002483
AB101AF 10 394181 806429 S92000003 S08000006 S12000033 S13002483
AB101AG 10 394251 806376 S92000003 S08000006 S12000033 S13002483
我想創建一個包含其中一列的歸一化版本使用下面的函數新列:
pcode_normalize <- function (x) {
x <- gsub(" ", " ", x)
if (length(which(strsplit(x, "")[[1]]==" ")) == 0) {
x <- paste(substr(x, 1, 4), substr(x, 5, 7))
}
x
}
我試圖執行它如下:
all_postcodes$npcode <- sapply(all_postcodes$pcode, pcode_normalize)
但它需要很長時間。任何建議如何提高性能?
你可以請'dput'幾行'all_postcodes $ pcode'? [如何創建**最小,可重現的示例**](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610#5963610) – Henrik
對不起 - 剛剛做到了!感謝您的建議! – Nick
你可能想使用'(g)sub(「[] {2,}」,'',x)',這是更一般的 – Janhoo