에 dataframe에 병합 :여러 XLSX 파일을 읽고 내가 코드를 쓰고 있어요 R
폴더
종류의 목록을 읽고 목록에서 특정 텍스트 요소와 폴더를 추출
각 파일
내부 탭/시트를 찾아 각 폴더에서 전체 파일 이름을 가져
루프/lapply read.xlsx() 파일
궁극적 인 목표 모든 탭을 읽는 것입니다 내 중첩 된 목록 이상/각 폴더에서 해당 파일의 시트에 열을 만드는 동안 사용자가 어떤 탭/시트인지, 어떤 폴더에서 왔는지 확인한 다음 한 번에 모든 항목을 병합합니다.
엑셀 파일을 읽을 때 선호하는 패키지는 'openxlsx'입니다.
여기 폴더와 파일을 얻기를위한 내 코드입니다 : 내가 루프 수 없었다
path<- "/Users/jackserna/Google Drive/Folder"
dataFolders<- list.files(path)
dataFolders<- sort(dataFolders[starts_with(match = "FY", vars = dataFolders)])
files<- lapply(lapply(dataFolders, FUN = function(x){
paste(path,x,sep = "/")
}), FUN = function(x){
list.files(x, pattern = "*.xlsx", full.names = TRUE)
})
/내 모든 파일과 내 모든 시트에 대한 읽기 기능을 적용 할 수 있습니다. 나는 하나 이상의 폴더를 읽지 않을 것이고, 이것은 반복되어야 할 것이다. 내가
data.to.merge <- lapply(lapply(files[[1]], FUN = function(x){
read.xlsx(x, sheet = 3, cols = 1:5)
}), na.omit)
merged.daata <- Reduce(function(...) merge(..., all = T), data.to.merge)
그러나,이 방법은 제가 읽어 각 시트에 대한 별도의 컬럼으로 시트 이름을 추가하는 것을 허용하지 않습니다 ...
this post에서 일부 코드를 사용했다.이 방법은 시트 # 3의 데이터가 있다고 가정합니다 ,하지만이 파일들에 대한 나의 당황 스러움에 대해서는 그렇지 않습니다. 데이터는 여러 시트에 분산되어 있으며 일부 시트는 병합을 위해 무시해야합니다. 모든 시트를 잡고 내가 원하지 않는 시트를 구문 분석하기위한 시도에서
는
, 여기에 행해졌 내용은 다음과 같습니다
allsheets<- list()
for(i in files){
for(j in i){
sheets<- getSheetNames(j)
allsheets<- cbind(allsheets,sheets)
}
}
그러나 이것은 읽기 사용할 수 있도록 악몽으로 설정하고있다 병합.
내가 얻으려고하는 것을 R에게 어떻게 이해시킬 수 있습니까?
나는이 루프를 시험해보고있다 :'data <- setNames (data.frame (matrix ncol = 207, nrow = 0)), column_names) wksheets <- list.files (recursive = T, pattern = ' * .XLSX ')에 대한 (I wksheets에서) { new_file <- loadWorkbook (wksheets [I]) sheetnames <- sheetnames - getSheets (new_file) sheetnames <: (j에 대한 [3 길이 (sheetnames)] sheetnames) { sheet_list <- readWorkbook (sheetnames [J], startRow = 2 COLNAMES = FALSE) sheet_list $ Reading.Center <- J} 데이터 <- rbind (데이터 sheet_list) RM (sheet_list) RM (시트 넘버) gc() }'하지만 모호한 오류가 발생했습니다. 오류 : NullPointerException (Java) : –
이 해결책을 따르십시오. http : //stackoverflow.com/questions/15825004/xlconnect-loadworkbook-error-poixmlexception-java – sconfluentus