シートを区切る空白の行がある場合は、大きなタブとして各タブを読み込み、そのように分割してみてください。
library(tidyverse)
library(readxl)
# read the whole thing into a single file
wholeworksheet <- read_excel('myfile.xlsx')
# find the blank rows
blankrows <- data_frame(
blanks = which(is.na(wholeworksheet[1]))
) %>%
mutate(
dif = blanks - lag(blanks)
, rownum = row_number()
# maybe someone can suggest a better way to handle using dplyr::lag()
, startrow = ifelse(rownum == 1, 1, NA)
, startrow = coalesce(ifelse(dif == 1, lag(startrow, default =1), lag(blanks + 1)), 1)
)
# get the end rows of each table
endrows <- blankrows %>%
group_by(startrow) %>%
summarize(
endrow = min(blanks)
)
# combine start and end rows into a single table
tableindex <- blankrows %>%
left_join(endrows, by = 'startrow') %>%
distinct(startrow, endrow)
# the last blank row is probably just before the last table in the sheet
if(nrow(wholeworksheet) > max(blankrows$blanks)) {
lasttable <- data_frame(startrow = max(blankrows$blanks) + 1, endrow = nrow(wholeworksheet))
tableindex <- tableindex %>%
bind_rows(lasttable)
}
# split your tables up into a list of tables
alistoftables <- map(1:nrow(tableindex), ~ wholeworksheet[tableindex$startrow[.x]:tableindex$endrow[.x] , ] )
JavaベースのExcelのパッケージのいくつかは、あなたが読むために明確な矩形領域を指定することができます 'startRow'、' startCol'、 'endRow'、' endCol'引数をベクトル化しています。例えば、XLConnect。 – joran
@joranありがとうございます!しかし、事は各テーブルの場所が時間の経過とともに変更される可能性があります。行の行は固定されていません。実際には各行は日付を表しているため、テーブルは毎週追加される行が増えて更新されます。では、startRowとendRowをどのように指定するのですか? –
確かに、1つのデータフレームにすべてを読み込んだ後、空の行を探してRで分割する方が簡単かもしれません。 – joran