将大型 Dataframe 拆分为较小的 Dataframe ,然后另存为csv

1szpjjfi  于 2023-03-15  发布在  其他
关注(0)|答案(2)|浏览(132)

第一次张贴在这里-道歉,如果我还没有得到如何提问的窍门。
我有一个大的csv文件(“AllANT_z”),其包含来自330多个参与者的数据,每个参与者具有大约290行数据(总共超过100 k行)。我已经加载了大csv,现在我使用一个简单的filter命令来单独挑选参与者(每个参与者都有一个唯一的参与者ID,列在标题为“参与者”的列下),将这些保存为数据,然后使用write.csv函数手动保存它们。有没有办法循环这个让它变得更快?我目前使用的方法可以工作--但非常耗时,而且容易出现人为错误。这就是我正在使用的:

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

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

bttbmeg0

bttbmeg01#

您可以按如下方式获取所有参与者的列表:

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)
}
5jdjgkvh

5jdjgkvh2#

假设您有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))
}

相关问题