使用data.table
軟件包可以大幅提升性能。通常,通過大量的操作和轉換,速度要快得多。 缺點是語法的學習曲線。然而,如果你正在尋求提高速度性能,那麼投資可能是值得的。
生成假數據
r <- 10500
c <- 6000
x <- sample(c(NA, 1:5), r * c, replace = TRUE)
df <- data.frame(matrix(x, nrow = r, ncol = c))
基礎R
df1 <- df
system.time(df1[is.na(df1)] <- 0)
user system elapsed
4.74 0.00 4.78
tidyr - replace_na()
dfReplaceNA <- function (df) {
require(tidyr)
l <- setNames(lapply(vector("list", ncol(df)), function(x) x <- 0), names(df))
replace_na(df, l)
}
system.time(df2 <- dfReplaceNA(df))
user system elapsed
4.27 0.00 4.28
數據。表 - set()
dtReplaceNA <- function (df) {
require(data.table)
dt <- data.table(df)
for (j in 1:ncol(dt)) {set(dt, which(is.na(dt[[j]])), j, 0)}
setDF(dt) # Return back a data.frame object
}
system.time(df3 <- dtReplaceNA(df))
user system elapsed
0.80 0.31 1.11
比較數據幀
all.equal(df1, df2)
[1] TRUE
all.equal(df1, df3)
[1] TRUE
是否該數據幀具有相同的類型(即,所有的數值,或所有的字符)的列?將它存儲爲矩陣可能會加快速度。 – Spacedman
經常轉換爲'data.table'可以提高許多操作的速度,但'is.na.data.table'不是其中之一。 – shayaa
@ Spacedman,所有數字 - 抱歉應該指定。將編輯。 – Peter