当行可能具有不同的变量/不同顺序的变量时,如何将行附加到 csv 文件?

How can I append rows to a csv file when the rows may have different variables/variables in different orders?

提问人:Jack Keefer 提问时间:10/20/2023 最后编辑:Jack Keefer 更新时间:10/20/2023 访问量:38

问:

我目前正在处理一个问题,我需要单独处理数据集的组。在我处理完每个组后,我想将其写入 csv 文件,以便它保存进度(我每次处理所有数据可能需要几天时间,如果发生某些事情,我不想冒丢失进度的风险)。我目前的 bodge/解决方案是在每次迭代后仅使用 bind_rows 来构建最终数据,并在每次迭代后通过将整个数据集(到目前为止已完成)写入 csv 文件来覆盖 csv 文件。但是,这通常会导致 R 在某个时候基本上冻结在此步骤中(它只是卡在写入 csv 文件,直到我终止会话,即使离开它几个小时)。我在附加时没有收到此错误。

但是,当我追加时,变量并不总是以正确的顺序排列。根据组的处理方式,它可能具有不同的变量集,或者它们的顺序可能不同。我不愿对变量列表或顺序进行硬编码,因为它将来可能会发生变化,即使现在也有大量的变体。我希望有一种将新数据行附加到 csv 文件的方法,它将变量写入正确的位置,如果新行包含 csv 文件中尚不存在的变量,则创建新变量。

有没有人对如何最好地做到这一点有任何想法?

这是我的代码相关部分的编辑/简化版本:

#First process a group in my data:
processedDataTemp <- dataProcessingFunction(single_group_in_data)

#Next, bind rows just processed with the data previously processed (unless it was the first 
#group to be processed) 
if(!exists('processedDataOutput')){
      if(!is.null(earlierProcessedData)){
        processedDataOutput = processedDataTemp
}else{
      processedDataOutput = bind_rows(processedDataOutput, processedDataTemp)
    }
#Now, if a file name for the csv file is provided, write all the processed data to the csv 
#(overwriting the previously written data)
if(!is.null(outputFileName)){
      cat(str_pad('\r Writing to CSV',50, 'right'))
      write_csv(processedDataOutput,file=outputFileName)
      cat(str_pad('\r Finished Writing to CSV',50, 'right'))
    }
R CSV 覆盖

评论


答: 暂无答案