У меня есть несколько переменных в столбце, и я хочу создать цикл в R, чтобы я мог экспортировать каждую переменную на свой лист в той же книге Excel - PullRequest
1 голос
/ 01 мая 2019

В документе Excel у меня есть 5 различных строковых переменных в столбце с именем Team.Два других столбца имеют дату и номер.Я хочу взять каждую отдельную строковую переменную и создать 5 листов на одном листе Excel в R. Я знаю, что мне нужно сделать цикл, но я застреваю.В настоящее время я делаю это долгий путь, но думаю, что есть более чистый путь.

Я застрял с помощью цикла, поэтому я сделал это долго, и он работает, но должен быть ярлык.

Пример данных

split_data <- read_excel("H:/R_split_pages.xlsx", sheet = "Sheet1")

Wildcats_ex <- split_data %>%
  filter(Team == "Wildcats")

Lions_ex <- split_data %>%
  filter(Team == "Lions")

Bulldogs_ex <- split_data %>%
  filter(Team == "Bulldogs")

Panthers_ex <- split_data %>%
  filter(Team == "Panthers")

Warriors_ex <- split_data %>%
  filter(Team == "Warriors")

write.xlsx(Wildcats_ex, file = "C:\\R_split_pagesRoutput2.xlsx", sheetName = "Wildcats", append = FALSE)

write.xlsx(Lions_ex, file = "C:\\R_split_pagesRoutput2.xlsx", sheetName = "Lions", append = TRUE)

write.xlsx(Bulldogs_ex, file = "C:\\R_split_pagesRoutput2.xlsx", sheetName = "Bulldogs", append = TRUE)

write.xlsx(Panthers_ex, file = "C:\\R_split_pagesRoutput2.xlsx", sheetName = "Panthers", append = TRUE)

write.xlsx(Warriors_ex, file = "C:\\R_split_pagesRoutput2.xlsx", sheetName = "Warriors", append = TRUE)

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Рассмотрим split + lapply или by:

team_data <- read_excel("H:/R_split_pages.xlsx", sheet = "Sheet1")

my_file <- "C:\\R_split_pagesRoutput2.xlsx"
if file.exists(my_file) unlink(my_file)

team_dfs <- split(team_data, team_data$Team)

lapply(team_dfs, function(df) 
      write.xlsx(file = my_file, sheetName = df$Team[1], append = TRUE)
)

В качестве альтернативы:

by(team_data, team_data$Team, function(df) 
      write.xlsx(file = my_file, sheetName = df$Team[1], append = TRUE)
)
0 голосов
/ 01 мая 2019

функции сделаны для такого рода повторяющихся задач. Без примера данных это немного сложно проверить, но это должно работать:

library(dplyr)
excel_func <- function(x){
  split_data %>%
    filter(Team == x) %>% 
    write.xlsx(file = "C:\\R_split_pagesRoutput2.xlsx", sheetName = x, append = TRUE)
}

... тогда вы можете использовать:

function("Lions")

чтобы записать вкладку в файл Excel. Если у вас есть вектор со всеми названиями команд (скажем, teams_vec), вы можете работать с ними и написать их все с помощью lapply и написать вкладки за один раз:

lapply(teams_vec, excel_func)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...