前一段,寫過一篇:R語言中寫入Excel的不同sheet表格,最近學(xué)習(xí)了tidyverse的方法,感覺需要總結(jié)一下,更新一下知識結(jié)構(gòu)。 本文準(zhǔn)備用實際數(shù)據(jù),做一下操作: 「批量讀?。骸?/strong> - 批量讀取一個Excel數(shù)據(jù)的不同表格
「批量寫入」 1. 模擬數(shù)據(jù)模擬數(shù)據(jù)的過程很簡單,新建一個Excel,里面加點內(nèi)容,然后復(fù)制粘貼,重命名。 ?懂了這么多編程知識,這一步顯得不夠高科技,但是確實是很直接。 ?  
2. 批量讀取2.1 批量讀取多個Excel數(shù)據(jù)「步驟:」 library(tidyverse) library(openxlsx)
list_name = dir("./",pattern = ".xlsx") list_name
re = map(list_name, ~ read.xlsx(.,sheet=1)) re names(re) = list_name re write.xlsx(re,"../re_hebing.xlsx")
目錄: 讀取結(jié)果: 結(jié)果文件: 在這里插入圖片描述 2.2 批量讀取一個Excel的不同sheet表格「步驟:」 name_sheet = 1:8 re2 = map(name_sheet, ~ read.xlsx("../re_hebing.xlsx",sheet=.)) re2
 3. 批量寫入3.1 批量寫入到不同的Excel中「步驟:」 - 內(nèi)容為list,每個元素為一個data.frame
這里,我們用re 的結(jié)果: > str(re) List of 8 $ a1.xlsx:'data.frame':4 obs. of 2 variables: ..$ ID: num [1:4] 1 2 3 4 ..$ y : num [1:4] 0.6275 0.4325 0.6046 0.0681 $ a2.xlsx:'data.frame':4 obs. of 2 variables: ..$ ID: num [1:4] 1 2 3 4 ..$ y : num [1:4] 0.6275 0.4325 0.6046 0.0681 $ a3.xlsx:'data.frame':4 obs. of 2 variables: ..$ ID: num [1:4] 1 2 3 4 ..$ y : num [1:4] 0.6275 0.4325 0.6046 0.0681 $ a4.xlsx:'data.frame':4 obs. of 2 variables: ..$ ID: num [1:4] 1 2 3 4 ..$ y : num [1:4] 0.6275 0.4325 0.6046 0.0681 $ a5.xlsx:'data.frame':4 obs. of 2 variables: ..$ ID: num [1:4] 1 2 3 4 ..$ y : num [1:4] 0.6275 0.4325 0.6046 0.0681 $ a6.xlsx:'data.frame':4 obs. of 2 variables: ..$ ID: num [1:4] 1 2 3 4 ..$ y : num [1:4] 0.6275 0.4325 0.6046 0.0681 $ a7.xlsx:'data.frame':4 obs. of 2 variables: ..$ ID: num [1:4] 1 2 3 4 ..$ y : num [1:4] 0.6275 0.4325 0.6046 0.0681 $ a8.xlsx:'data.frame':4 obs. of 2 variables: ..$ ID: num [1:4] 1 2 3 4 ..$ y : num [1:4] 0.6275 0.4325 0.6046 0.0681
這里,我們將工作目錄設(shè)置為上一級,用map2 進行操作: setwd("../") sheet_name = names(re) sheet_name map2(re,sheet_name,write.xlsx)
結(jié)果: 3.2 批量寫入到同一個Excel中不同sheet表格這就不用操作,直接寫入就行了,一行代碼: write.xlsx(re,"new_new_many_sheets.xlsx")
 
4. 知識點總結(jié)- 寫入多個Excel時,用了map2函數(shù),其實還可以用walk2函數(shù),walk2就不會返回結(jié)果到終端了
- 默認(rèn)的write.xlsx函數(shù),支持寫入list就是多個sheet表格
- 有時候重命名list更有用,比如寫入到不同sheet表格中,名稱就是不同sheet表的名稱
- 讀取不同sheet表格時,可以用1,2,3表示對應(yīng)的sheet
- 另外,如果想把批量讀取的Excel進行行合并或者列合并,可以用map_dfc或者map_dfr更簡單。當(dāng)然,后面也可以用map再做處理
- 總之,map函數(shù)就是批量操作的,越用越6
|