第一次在这里发帖 - 如果我还没有掌握如何提问的窍门,我深表歉意。
我有一个大型 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 新手,还不知道如何循环。任何帮助将不胜感激 - 谢谢!
您可以获得所有参与者的列表,如下所示:
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)
}
假设你有 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))
}