2017-08-28 14 views
2

Excelブックからシートを読み込もうとしています。そのブックには10枚のシートがあり、名前はそれぞれ異なります。私が何をしたいかExcelブックの各シートを別々のデータフレームで読み込み、シート名の前に接頭辞を付けて列の名前を変更してください。

  1. 読むワークブックの最初のシートの名前(名前は「マイシート 1」であると仮定)
  2. は、名前
  3. をMy_Sheet_1する必要がありますdata.frameにデータを読みます
  4. 新しい列などの列名を変更すると、シートの列名が "My Column 1"、次にRのdata.frameの場合は "My_Sheet_1_My_Column_1"に変更する必要があります。等。

私が使用してみました:

read_allsheets_from_excel <- function(filename) { 
    sheets <- excel_sheets(filename) 
    x  <- lapply(sheets, function(X) read_excel(filename, sheet = X)) 
    names(x) <- sheets 
    x 
} 
# read now 
read_allsheets_from_excel("DATA.XLSX") 

も試してみました:

My_Column_1 <- read.xlsx("DATA.XLSX", sheetIndex = 1) 

colnames(My_Column_1) <- colnames(My_Column_1, do.NULL = TRUE, prefix = "My_Sheet_1") 

しかし、どれも作業していません。 10種類のシートすべてを自動化するのは良い方法でもありません。どのように改善することができますか?

答えて

1

あなたはほとんどそこにいました。何をする必要がある、あなたのループ内の列の名前を変更すると

library(readxl) 

datasets <- readxl_example("datasets.xlsx") 

read_allsheets_from_excel <- function(filename) { 
    sheets <- excel_sheets(filename) 
    setNames(lapply(sheets, function(.) { 
     tbl <- read_excel(filename, sheet = .) 
     names(tbl) <- paste(., names(tbl), sep = "_") 
     tbl 
    }), sheets) 
} 

# read now 
allSheets <- read_allsheets_from_excel(datasets) 

lapply(names(allSheets), function(nam) 
    assign(nam, allSheets[[nam]], envir = .GlobalEnv)) 
ls() 
# [1] "allSheets"     "chickwts"     
# [3] "datasets"     "iris"      
# [5] "mtcars"     "quakes"     
# [7] "read_allsheets_from_excel" 
+0

それはあなたがどういうデータフレーム:( –

+0

にCOL名を変更しない地球環境に変数を作成するためにassignを使用することです? '名前(mtcars) ''私 を与える[1] "mtcars_mpg" "mtcars_cyl" "mtcars_disp" "mtcars_hp" "mtcars_drat" [6] "mtcars_wt" "mtcars_qsec" "mtcars_vs" "mtcars_am" "mtcars_gear" [11] "mtcars_carb" 'またはExcelファイルの列の名前を変更することを意味しますか?この場合、私はとにかくVBAを使用します。 – thothal

関連する問題