r語言賦值為na 如何將R資料中的NA值替換為0?

2021-10-13 03:26:59 字數 4846 閱讀 3672

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演算法對商品交易資料進行關聯規則挖掘,二 常見關聯規則 關聯規則 牛奶 雞蛋...