Разбейте большой массив данных на R и выведите его на отдельные листы в одной книге Excel - PullRequest
0 голосов
/ 24 марта 2020

Предположим, у меня есть следующий фрейм данных в R, и я хочу разделить фрейм данных на отдельные листы Excel, распределенные по столбцу Fruit


+--------+-------+
| Fruit  | Price |
+--------+-------+
| Apple  |    12 |
| Apple  |    14 |
| Apple  |    15 |
| Orange |     2 |
| Orange |     4 |
| Orange |     6 |
| Pear   |     3 |
| Pear   |     6 |
| Pear   |     9 |
+--------+-------+

После разделения фрейма данных на 3 отдельных фрейма данных (Apple, Orange и Pear), я намереваюсь экспортировать каждый фрейм данных в отдельные листы Excel (называемые Apple, Orange и Pear), но хранящиеся в одной и той же книге Excel Out.xlsx. Однако приведенный ниже код R не работает. В результате получается рабочая книга Excel Out.xlsx с одним листом Pear, содержащая фрейм данных Pear.

library(openxlsx)
df <- read_excel("Export excel test.xlsx")
output <- split(df, df$Fruit)
for (i in 1:length(output)){write.xlsx(x = output[i],
file = "Out.xlsx", sheetName = names(output[i]),append = TRUE)}

Кто-нибудь сможет помочь с этим? Мой фактический фрейм данных содержит более 4 миллионов строк, поэтому мне нужно разбить фрейм данных на отдельные листы, чтобы обойти ограничения строк в Excel

1 Ответ

1 голос
/ 24 марта 2020

Похоже, вы используете команды из пакета xlsx.

Пакет xlsx также предоставляет функцию write.xlsx, которая позволяет добавлять к существующей книге.

library(xlsx)

write.xlsx(subset(iris, subset=Species=="setosa"), 
    file="iris.xlsx", sheetName = "setosa")

write.xlsx(subset(iris, subset=Species=="versicolor"), 
    file="iris.xlsx", sheetName = "versicolor", append=TRUE)

write.xlsx(subset(iris, subset=Species=="virginica"), 
    file="iris.xlsx", sheetName = "virginica", append=TRUE)

openxlsx пакет делает это немного по-другому. Здесь я буду использовать al oop.

library(openxlsx)

output <- split(iris, iris$Species)

wb <- createWorkbook()

for (i in 1:length(output)) {
  addWorksheet(wb, sheetName=names(output[i]))
  writeData(wb, sheet=names(output[i]), x=output[[i]]) # Note [[]]
}

saveWorkbook(wb, "iris.xlsx", overwrite = TRUE)
...