Аргумент which
должен быть вектором имен листов. То есть он должен быть в этом формате, используя функцию c
:
which = c("201901,Xizhi,PM10", "201902,Xizhi,PM10", "201902,Wanli,PM10")
или любые другие листы, которые вы хотите импортировать.
Аргумент which
не появляется поддерживать регулярные выражения, поэтому импорт листов с использованием подстановочных знаков невозможен. Но вы можете импортировать все листы и затем использовать столбец _file
, чтобы выбрать данные для индивидуального экспорта (если вы знаете, какой номер листа является каким, поскольку имена листов не сохраняются, только номер).
В ваши данные, у вас есть вся информация в первой строке, но вы не импортируете ее, потому что вы указываете диапазон как «A2: Y33». Если вы выберете «A1: Y33», то вы получите «символы» для всех столбцов, и вам это не нужно, поскольку имена столбцов начинаются со строки 2.
Одним из решений является импорт всех листов, range = "A2: Y33", как вы сделали, а затем повторите для диапазона "A1: Y2", сохраняя результат как d2
. Этот диапазон содержит информацию, которую вам нужно выбрать. Затем вы можете объединить d
с d2
в _file
и экспортировать отдельные CSV-файлы на основе информации в d2
.
library(rio)
d1 <- import_list("sample_data.xlsx",
setclass="data.table",
range = "A2:Y33", rbind = T,
col_names=T,
rbind_label = "_file",
rbind_fill = TRUE)
Для d2
мы импортируем только диапазон "A1: Y1 ", затем подставьте в столбцы 1, 7, 13 и 26 и установите соответствующие имена.
d2 <- setNames(
subset(
import_list("sample_data.xlsx",
setclass="data.table",
range = "A1:Y1", rbind = T,
col_names=F,
rbind_label = "_file"),
select=c(1,7,13,26)),
c("Site","Param","YM","_file"))
Затем объедините два набора данных в столбце _file
.
d3 <- merge(d1, d2, by="_file")
Проверка данные.
table(d3$Site, d3$Param, d3$YM)
, , = YM: 2019/01
Param: AMB_TEMP(℃) Param: PM10(μg/m3)
Site: Wanli 31 31
Site: Xizhi 31 31
, , = YM: 2019/02
Param: AMB_TEMP(℃) Param: PM10(μg/m3)
Site: Wanli 31 31
Site: Xizhi 31 31
Таким образом, есть восемь листов, каждый из которых содержит 31 запись. Но мы должны очистить эти имена, потому что, если мы используем их для имен файлов, Р. будет жаловаться.
d3$Site <- sub(".*: (.+)", "\\1", d3$Site)
d3$Param <- sub(".*: (.+)\\(.+", "\\1", d3$Param)
d3$YM <- sub(".*: (\\d{4})\\/(.+)", "\\1_\\2", d3$YM)
Теперь разделим на взаимодействие всех трех контекстных переменных
f <- with(d3, split(d3, list(Site, Param, YM)))
И сохраняем в отдельные файлы CSV.
lapply(names(f), function(x) write.csv(f[[x]], file=paste(x, ".csv", sep="")))
dir()
[1] "Wanli.AMB_TEMP.2019_01.csv" "Wanli.AMB_TEMP.2019_02.csv" "Wanli.PM10.2019_01.csv"
[4] "Wanli.PM10.2019_02.csv" "Xizhi.AMB_TEMP.2019_01.csv" "Xizhi.AMB_TEMP.2019_02.csv"
[7] "Xizhi.PM10.2019_01.csv" "Xizhi.PM10.2019_02.csv"
После этого вы можете легко выбрать экспорт только тех данных, которые вам нужны, используя подмножество f
или d3
.