在R语言中按分组变量将指定列导出为独立CSV文件
按分组变量导出DataFrame为指定列的独立CSV文件
需求说明
将单个DataFrame按subject_nr分组,每个分组导出为独立CSV文件(文件名如101.csv、102.csv),且仅保留item、start_time、end_time三列数据。
示例数据
df <- data.frame("subject_nr" = c("101", "101", "101", "102", "102", "103", "103", "103"), "item" = c("a", "b", "c", "a", "b", "a", "b", "c"), "start_time" = c(50, 52, 55, 53, 54.5, 12, 15, 17), "end_time" = c(51, 54, 60, 53.5, 55.5, 14, 16.5, 19), "extra_variable"= c("s", "t", "u", "v", "w", "x", "y", "z"))
预期输出示例(101.csv)
"item","start_time","end_time" "a",50,51 "b",52,54 "c",55,60
实现方法
方法1:基础R实现
无需额外安装包,用split()拆分数据框,再通过lapply()遍历导出:
# 按subject_nr拆分数据框 split_df <- split(df, df$subject_nr) # 遍历每个子集,导出指定列到CSV lapply(names(split_df), function(subj) { # 提取当前分组的指定列 subset_data <- split_df[[subj]][, c("item", "start_time", "end_time")] # 导出CSV,文件名用分组名,不包含行名 write.csv(subset_data, file = paste0(subj, ".csv"), row.names = FALSE) })
方法2:tidyverse工具链实现
使用dplyr处理分组,purrr执行批量导出:
# 首次使用需安装包 # install.packages("tidyverse") library(tidyverse) # 筛选指定列 -> 按subject_nr分组 -> 批量导出 df %>% select(item, start_time, end_time, subject_nr) %>% group_by(subject_nr) %>% group_walk(function(data, key) { write.csv(data[, -4], file = paste0(key$subject_nr, ".csv"), row.names = FALSE) })
更简洁的写法:
df %>% select(item, start_time, end_time, subject_nr) %>% group_split(subject_nr) %>% walk(function(subset) { subj <- unique(subset$subject_nr) write.csv(subset[, -4], paste0(subj, ".csv"), row.names = FALSE) })
内容的提问来源于stack exchange,提问作者user9974638
相关产品推荐
相关产品推荐

