我正在基准测试data.frame
并data.table
针对相对较大的数据集。
首先我们生成一些数据。
set.seed(1234)
library(data.table)
df = data.frame(First_Payment_date=c(sample(c(NA,1:100),1000000, replace=1)),
Payment_Date=c(sample(1:100,1000000, replace=1)))
dt = data.table(df)
然后设置基准。我正在@BondedDust 的答案及其data.table
等效性之间进行测试。我稍微修改(调试)了他的代码。
library(microbenchmark)
test_df = function(){
df$User_status <- "Error"
df$User_status[ is.na(df$First_Payment_date) ] <- "User never paid"
df$User_status[ df$Payment_Date >= df$First_Payment_date ] <- "Paying user"
df$User_status[ df$Payment_Date < df$First_Payment_date ] <- "Attempt before first payment"
}
test_dt = function(){
dt[, User_status := "Error"]
dt[is.na(First_Payment_date), User_status := "User never paid"]
dt[Payment_Date >= First_Payment_date, User_status := "Paying user"]
dt[Payment_Date < First_Payment_date, User_status := "Attempt before first payment"]
}
microbenchmark(test_df(), test_dt(), times=10)
结果:data.table
比data.frame
生成的 100 万行数据快 4 倍。
> microbenchmark(test_df(), test_dt(), times=10)
Unit: milliseconds
expr min lq median uq max neval
test_df() 247.29182 256.69067 287.89768 319.34873 330.33915 10
test_dt() 66.74265 69.42574 70.27826 72.93969 80.89847 10
笔记
data.frame
比data.table
小型数据集(比如 10000 行)更快。