【问题标题】:Saving multiple data frames in a for loop as separate CSV将 for 循环中的多个数据帧保存为单独的 CSV
【发布时间】:2020-05-28 19:05:00
【问题描述】:

我正在尝试在 for 循环中将几个 (>600) 小标题/数据帧保存为 CSV。我想单独保存它们的原因是因为它们有不同大小的列和行。不幸的是,它不起作用。它们是否是一个数据框并不重要,我会得到同样的错误。

我也尝试过 write.csv,但这并没有保存实际的数据框。相反,它会在第一个单元格中创建一个仅包含单词“events355486”的 CSV。有任何 R 向导可以帮助我吗?

此处的示例代码:

library(tidyverse)
match_id_test <- tibble( match_id = c(355486, 487627, 793011, 
                                       845722, 949077, 1022888),
                          game_id  = c("game355486", "game487627","game793011", 
                                       "game845722", "game949077", "game1022888"),
                          events_id = c("events355486", "events487627","events793011", 
                                        "events845722", "events949077", "events1022888")
                          )
events355486 <- tibble(x = 1:1, y= 1:1)
events487627 <- tibble(x = 1:2, y= 1:2)
events793011 <- tibble(x = 1:3, y= 1:3)
events845722 <- tibble(x = 1:4, y= 1:4)
events949077 <- tibble(x = 1:5, y= 1:5)
events1022888 <- tibble(x = 1:6, y= 1:6)
for (i in 1:nrow(match_id_test)){
    write_csv(paste0("events", match_id_test[i,1]),
              here(paste0("./Data/Events",match_id_test[i,1], ".csv")
              )
    )
}
#> Error in write_delim(x, path, delim = ",", na = na, append = append, col_names = col_names, : is.data.frame(x) is not TRUE

【问题讨论】:

    标签: r csv dataframe for-loop tibble


    【解决方案1】:

    使用 Ronak 描述的 purrr 包,但使用 map2 并使用 readr 函数可以:

    map2(match_id_test$events_id,
         match_id_test$match_id,
        function(x, y){
          get(x) %>% 
            write_csv(
              here::here(
                paste0(
                  "./Data/Events", y, ".csv"
                )))
        })
    

    【讨论】:

      【解决方案2】:

      也许是这样的:

      for (i in 1:nrow(match_id_test)){
        write_csv(get(paste0("events", match_id_test[i,1])),
                  paste0("./Data/Events", match_id_test[i,1], ".csv")
        )
      }
      

      【讨论】:

        【解决方案3】:

        lapply,你可以试试:

        lapply(match_id_test$events_id, function(x) 
               write.csv(get(x), paste0('./Data/Events/', x, '.csv'), row.names = FALSE))
        

        或者使用mgetpurrr:imap

        purrr::imap(mget(match_id_test$events_id), 
               ~write.csv(x, paste0('./Data/Events/', .y, ".csv"), row.names = FALSE))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-03
          • 2022-01-21
          • 1970-01-01
          • 2018-01-21
          • 2021-10-24
          相关资源
          最近更新 更多