如何在R语言中按team列循环输出对应分组的TXT文件?
按Team列拆分数据并导出到对应TXT文件的修正方案
你的原始数据集:
df <- data.frame( no = c(1:10), name = c("Py", "C", "Mike","Lin", "Terry", "Amada", "Jack.P", "Robber" , "Mary", "Kate"), score = c(1, 2, NA, 4, 5, 6, 7, 10, 5, 7), team = c(1, 3, 2, 5, 4, 2, 3, 5, 4, 1) )
原代码的问题:
- 循环内没有根据当前team值筛选对应数据,直接把全量
df赋值给data,导致每个文件都存了所有数据 - 文件名生成逻辑错误,
glue用法不对,未将当前team值代入,还用到了未定义的path变量 - 用
df[[4]]取team列不够直观,一旦列顺序变动就会出错
修正后的基础循环代码
# 获取所有唯一的team值 teams <- unique(df$team) # 遍历每个team for (team in teams) { # 筛选当前team对应的数据 filtered_data <- df[df$team == team, ] # 生成对应文件名,比如"1.txt" file_name <- paste0(team, ".txt") # 导出数据,关闭行号输出,将NA转为空字符串 write.table(filtered_data, file = file_name, sep = ",", row.names = FALSE, na = "") }
更简洁的tidyverse方案(需先安装tidyverse包)
如果习惯用tidyverse语法,可用group_split+walk组合实现,代码更简洁:
library(tidyverse) df %>% group_split(team) %>% walk(function(x) { team_num <- unique(x$team) write.table(x, file = paste0(team_num, ".txt"), sep = ",", row.names = FALSE, na = "") })
代码说明
group_split(team):按team列拆分数据,生成每个team对应的数据集列表walk:遍历列表中的每个数据集,执行导出操作,适合处理导出这类无返回值的操作paste0(team_num, ".txt"):拼接出对应team的文件名row.names = FALSE:避免导出时写入行号na = "":将NA值转为空字符串,避免文件中出现"NA"标识
内容的提问来源于stack exchange,提问作者Ollie
相关产品推荐
相关产品推荐

