将大数据帧拆分为较小的数据帧,然后保存为 csv

问题描述 投票:0回答:2

第一次在这里发帖 - 如果我还没有掌握如何提问的窍门,我深表歉意。

我有一个大型 csv 文件(“AllANT_z”),其中包含来自 330 多名参与者的数据,每个参与者大约有 290 行数据(总共超过 10 万行)。我已经加载了大型 csv,现在我正在使用一个简单的过滤器命令来单独挑选参与者(每个参与者都有一个唯一的参与者 ID,列在标题为“参与者”的列下),将这些保存为数据,然后使用写入.csv 函数来手动保存它们。有没有办法循环它以使其更快?我目前使用的方法有效——但它非常耗时且容易出现人为错误。这就是我正在使用的:

boa001 <- AllANT_z %>%
  filter(participant == "boa001")
write.csv(boa001, "E:/CognitiveData_Processed/ANT_zscored/zscored_allANT/boa001.csv", row.names = TRUE)

有什么方法可以加快速度——也许用一个循环?我是 R 新手,还不知道如何循环。任何帮助将不胜感激 - 谢谢!

r loops filter export-to-csv
2个回答
1
投票

您可以获得所有参与者的列表,如下所示:

participant_list <- unique(AllANT_z$participant)

请注意,我无法确定这是否适合您,因为我没有看到您的实际数据。但总的来说,这应该有效。 您可能还想检查将创建多少个文件

length(participant_list)

之后您可以遍历参与者 ID,过滤并将其保存到 CSV 文件:

for (id in participant_list) {
  participant_data <- AllANT_z %>%
    filter(participant == id)
  write.csv(participant_data, paste0("E:/CognitiveData_Processed/ANT_zscored/zscored_allANT/", id, ".csv"), row.names = TRUE)
}

你也可以使用子集而不是过滤器:

for (id in participant_list) {
  participant_data <- subset(AllANT_z, participant == id)
  write.csv(participant_data, paste0("E:/CognitiveData_Processed/ANT_zscored/zscored_allANT/", id, ".csv"), row.names = TRUE)
}

0
投票

假设你有 330 名参与者,他们都遵循命名方案 'boa{three-digit-number}'

#sprintf is used to generate the numbers with leading zeros
for(i in sprintf('%0.3d', 1:330)){

      participant <- paste0("boa", i)
      
      AllANT_z %>%
        filter(participant == participant) %>% 
        write.csv(paste0("E:/CognitiveData_Processed/ANT_zscored/zscored_allANT/", participant, ".csv", row.names = TRUE))
    }

这将为所有参与者生成字符串,选择相应的参与者,并写入具有相应名称的 CSV 文件。如果他们不遵循命名方案,您应该定义一个包含所有名称的向量

participants <- c("boa001, ...")

然后像

一样遍历它
for(i in participants){
  AllANT_z %>%
    filter(participant == participant) %>% 
    write.csv(paste0("E:/CognitiveData_Processed/ANT_zscored/zscored_allANT/", participant, ".csv", row.names = TRUE))
}
© www.soinside.com 2019 - 2024. All rights reserved.