【问题标题】:Loop to split Large Data Frame and write multiple CSV files in R [duplicate]循环拆分大数据框并在R中写入多个CSV文件[重复]
【发布时间】:2020-11-05 21:47:50
【问题描述】:

我有一个包含 2500 万行的文件,需要根据因子级别将其拆分为较小的文件。我创建了一个包含不同因子级别的数据框,并编写了一个循环来执行一些操作并写出csv

数据如下所示:

Country Col2 Code   Year
 A       C     1    2020
 A       D     1    2020
 A       C     1    2020
 A       D     2    2020
 A       C     2    2020
 A       D     2    2020
 A       C     2    2020
 A       D     3    2020

意图是根据代码为每个子集编写一个csv文件

d1 <- data %>%
  distinct(Code)
for(i in 1:nrow(d1))
{
  
  subset <- data %>%
  filter(Code  == Code[i])
  co <- subset$Code[i]
  
  yr<- subset$Year[i]
  

  setwd("C:/Users/...")
  
  write.csv(subset, paste(co,"_",Year, ".csv", sep=""), append = FALSE, row.names = FALSE)
  
  }

输出不断被写入同一个文件,而不是在目录中创建单独的文件。

有没有更好的方法来做到这一点?谢谢。

【问题讨论】:

    标签: r loops csv dplyr


    【解决方案1】:

    使用split 根据因子水平拆分数据。

    df_dat <- split(df, df$Code)
    lapply(df_dat, function(x) write.csv(x, paste0('df_', x$col2[1], '.csv'), row.names = FALSE))
    

    这将在您的工作目录中创建单独的数据框。

    【讨论】:

    • 谢谢。因此它有效地开始编写单独的文件,但名称是一个问题。在我的代码中,co 代表将存储在 Col1 或 Col2 中的国家名称。这需要列的名称
    • 1) 你怎么知道名字应该取自 Col1 还是 Col2 ? 2) 你希望它采用哪个co 值?例如 Code == 1Col1 有 A 和 B 应该写成文件名?
    • 国家名称将始终存储在 col2 中。刚刚检查过
    • 我正在创建一个子集,其中 code == 1 将只有 1 个国家/地区名称。将编辑样本数据。谢谢
    • 查看更新的答案。
    猜你喜欢
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 2011-07-21
    • 2017-01-22
    • 2018-11-29
    • 1970-01-01
    相关资源
    最近更新 更多