dplyr雜交選項現在比baser子集重新分配快30%左右。在乙個100公尺的資料池上mutate_all(~replace(., is.na(.), 0))比基數r快半秒d[is.na(d)]
如果你在為大量的資料而掙扎,data.table是最快的選擇:比標準快40%。基r接近。它還可以修改現有的資料,有效地允許您一次處理幾乎兩倍的資料。
其他有用的潮汐替換方法的聚類
地點:指數 mutate_at(c(5:10), ~replace(., is.na(.), 0))
直接參考 mutate_at(vars(var5:var10), ~replace(., is.na(.), 0))
固定匹配 mutate_at(vars(contains("1")), ~replace(., is.na(.), 0))或代替
contains(),試試看
ends_with(),starts_with()
模式匹配 mutate_at(vars(matches("\\d")), ~replace(., is.na(.), 0))
有條件:
(只更改數值(列),並保留字串(列)。)整數 mutate_if(is.integer, ~replace(., is.na(.), 0))
雙打 mutate_if(is.numeric, ~replace(., is.na(.), 0))
弦 mutate_if(is.character, ~replace(., is.na(.), 0))
完整的分析-
更新為dplyr 0.8.0:函式使用purrr格式~符號:替換已廢棄的funs()爭論。
測試的方法:# base r: baser.sbst.rssgn
x[[j]][is.na(x[[j]])] = 0 }# tidyverse## dplyrdplyr_if_else
}dplyr_coalesce
s.list(setnames(rep(0, 10), as.list(c(paste0("var", 1:10)))))) }## hybrid hybrd.ifelse
s.na(.), 0, .)) }hybrd.replace_na
x, ~replace(., is.na(.), 0)) }hybrd.rplc_at.idx
unction(x) hybrd.rplc_at.stw
th("var")), ~replace(., is.na(.), 0)) }hybrd.rplc_at.ctn
) }hybrd.rplc_at.mtc
) # data.table library(data.table)dt.for.set.nms
(j in names(x))
set(x,which(is.na(x[[j]])),j,0) }dt.for.set.sqln
set(x,which(is.na(x[[j]])),j,0) }dt.fnafill
這一分析的**:library(microbenchmark)# 20% na filled dataframe of 10 million rows and 10 columnsset.seed(42) # to recreate the exact dataframedfn
dimnames = list(null, paste0("var", 1:10)),
ncol = 10))# running 600 trials with each replacement method # (the functions are excecuted locall
y - so that the original dataframe remains unmodified in all cases)perf_results
hybrid.ifelse = hybrid.ifelse(copy(dfn)),
dplyr_if_else = dplyr_if_else(copy(dfn)),
hybrd.replace_na = hybrd.replace_na(copy(dfn)),
baser.sbst.rssgn = baser.sbst.rssgn(copy(dfn)),
baser.replace = baser.replace(copy(dfn)),
dplyr_coalesce = dplyr_coalesce(copy(dfn)),
tidyr_replace_na = tidyr_replace_na(copy(dfn)),
hybrd.replace = hybrd.replace(copy(dfn)),
hybrd.rplc_at.ctn= hybrd.rplc_at.ctn(copy(dfn)),
hybrd.rplc_at.nse= hybrd.rplc_at.nse(copy(dfn)),
baser.for = baser.for(copy(dfn)),
hybrd.rplc_at.idx= hybrd.rplc_at.idx(copy(dfn)),
dt.for.set.nms = dt.for.set.nms(copy(dfn)),
dt.for.set.sqln = dt.for.set.sqln(copy(dfn)),
times = 600l)
結果摘要》 print(perf_results)unit: milliseconds
expr min lq mean median uq max neval
hybrd.ifelse 6171.0439 6339.7046 6425.221 6407.397 6496.992 7052.851 600
dplyr_if_else 3737.4954 3877.0983 3953.857 3946.024 4023.301 4539.428 600
hybrd.replace_na 1497.8653 1706.1119 1748.464 1745.282 1789.804 2127.166 600
baser.sbst.rssgn 1480.5098 1686.1581 1730.006 1728.477 1772.951 2010.215 600
baser.replace 1457.4016 1681.5583 1725.481 1722.069 1766.916 2089.627 600
dplyr_coalesce 1227.6150 1483.3520 1524.245 1519.454 1561.488 1996.859 600
tidyr_replace_na 1248.3292 1473.1707 1521.889 1520.108 1570.382 1995.768 600
hybrd.replace 913.1865 1197.3133 1233.336 1238.747 1276.141 1438.646 600
hybrd.rplc_at.ctn 916.9339 1192.9885 1224.733 1227.628 1268.644 1466.085 600
hybrd.rplc_at.nse 919.0270 1191.0541 1228.749 1228.635 1275.103 2882.040 600
baser.for 869.3169 1180.8311 1216.958 1224.407 1264.737 1459.726 600
hybrd.rplc_at.idx 839.8915 1189.7465 1223.326 1228.329 1266.375 1565.794 600
dt.for.set.nms 761.6086 915.8166 1015.457 1001.772 1106.315 1363.044 600
dt.for.set.sqln 787.3535 918.8733 1017.812 1002.042 1122.474 1321.860 600
結果示意圖ggplot(perf_results, aes(x=expr, y=time/10^9)) +
geom_boxplot() +
xlab('expression') +
ylab('elapsed time (seconds)') +
scale_y_continuous(breaks = seq(0,7,1)) +
coord_flip()
彩色編碼的試驗散射圖(在對數尺度上有y軸)qplot(y=time/10^9, data=perf_results, colour=expr) +
labs(y = "log10 scaled elapsed time per trial (secs)", x = "trial number") +
coord_cartesian(ylim = c(0.75, 7.5)) +
scale_y_log10(breaks=c(0.75, 0.875, 1, 1.25, 1.5, 1.75, seq(2, 7.5)))
關於其他高表演者的筆記
當資料集變大時,提德『』replace_na從歷史上說是站在前面的。在當前5000萬個資料點的集合中,它的效能幾乎與基r為了迴圈。我很想看看不同大小的資料檔案會發生什麼。
定語和鑑賞
特別感謝:和為了演示微基準。
幫助我理解
local()以及(在弗蘭克耐心的幫助下)沉默脅迫在加速這些方法中所起的作用。
亞瑟葉(arthuryip)為戳新增較新的
coalesce()參與並更新分析。
葛雷格讓我去找出
data.table功能足夠好,最終包括他們的陣容。
資料表關於迴圈:
(當然,如果你覺得這些方法有用的話,也請把手伸出來。)
硬體使用3.9ghz cpu,24 gb ram
R基礎 如何將列表中的內容匯出成文字
對於資料庫和矩陣,我們可以非常方便的使用write.table將資料輸出文字,那麼對於列表應該如何處理呢?在 r資料科學讀書筆記 r語言的資料結構原來可以這樣理解中,我們可以知道列表只是一種遞迴的向量而已,如果要把列表輸出成文字,只要遞迴的將裡面的資料寫出到文字即可。舉個例子,如下我構建了乙個列表,...
R中如何讀取資料
對於在檔案讀取和寫入的工作,r使用工作目錄來完成。可以使用命 令getwd 獲得工作目錄 來找到目錄,使用命令setwd c data 或 者setwd home paradis r 來改變目錄。如果乙個檔案不在工作目錄裡 則必須給出它的路徑8。r可以用下面的函式讀取儲存在文字檔案 ascii 中的...
R語言 資料探勘 R語言如何做關聯規則?
一 前言 提到資料探勘,我們第一反應就是之前聽到的啤酒和尿不濕的故事,該故事就是典型的資料探勘中的關聯規則。購物籃分析區別於傳統的線性回歸的主要區別為,關聯分析針對離散資料 下面我們利用r語言的arules包及apriori演算法對商品交易資料進行關聯規則挖掘,二 常見關聯規則 關聯規則 牛奶 雞蛋...