【问题标题】:I have several variables in a column and want to create a loop in R so I can export each variable onto it's own sheet in the same excel workbook我在一列中有几个变量,并想在 R 中创建一个循环,以便我可以将每个变量导出到同一个 Excel 工作簿中它自己的工作表中
【发布时间】:2019-04-30 21:00:38
【问题描述】:

在一个 Excel 文档中,我在名为 Team 的列中有 5 个不同的字符串变量。另外两列有一个日期和一个数字。我想获取每个不同的字符串变量并在 R 中的同一个 excel 工作表上创建 5 张工作表。我知道我需要做一个循环,但一直卡住。我目前正在做很长的路,但认为有一种更清洁的方法。

我在使用循环时被卡住了,所以我做了很长的路,它可以工作,但必须有一个捷径。

Sample Data

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)

【问题讨论】:

  • 您好,您可以添加代码格式以使您的问题更易于阅读吗?

标签: r loops dplyr


【解决方案1】:

函数是为这种重复性任务而设计的。如果没有数据示例,这有点难以测试,但应该可以:

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)

【讨论】:

    【解决方案2】:

    考虑split + lapplyby

    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)
    )
    

    【讨论】:

      猜你喜欢
      • 2021-04-19
      • 1970-01-01
      • 2014-08-03
      • 2020-05-23
      • 2021-08-09
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多