使用R语言For循环导出多个CSV文件仅生成表头行的问题排查
问题排查与解决方案
嘿,这个问题我太熟了!你的代码之所以导出的CSV只有表头,核心原因是你循环用的i和mall列的实际取值不匹配。
让我拆解一下:
- 你先计算
m <- length(unique(rd_1$mall)),得到的是 mall 列不同值的数量,比如如果 mall 的值是c(3,5,3,7),那 m 就是3。 - 然后你循环
i in 1:m,也就是1、2、3,但你的 mall 列里根本没有1和2这两个值,所以subset(rd_1, mall==i)每次都匹配不到任何数据,自然导出的CSV只有表头啦!
两种修复方案
方案1:直接遍历 mall 的唯一值(最推荐)
直接把 mall 的唯一值存成一个向量,循环这个向量本身,这样每次匹配的都是真实存在的 mall 值:
# 先提取mall的所有唯一值 unique_malls <- unique(rd_1$mall) # 遍历每个唯一值 for(mall_val in unique_malls){ # 筛选对应mall的数据 subset_data <- subset(rd_1, mall == mall_val) # 导出文件,文件名用实际的mall值 write.csv(subset_data, file = paste0("C:/Users/yogesh/Desktop/Work/Analysis/","mall_", mall_val, ".csv"), row.names = TRUE) }
方案2:用索引但对应到真实的 mall 值
如果你还是想用索引循环,那要把i对应到unique(rd_1$mall)[i],而不是直接用i:
m <- length(unique(rd_1$mall)) unique_malls <- unique(rd_1$mall) dataframe.list<-list() for(i in 1:m){ dataframe.list[[i]] <- subset(rd_1, mall == unique_malls[i]) write.csv(dataframe.list[[i]], file = paste0("C:/Users/yogesh/Desktop/Work/Analysis/","mall_", unique_malls[i], ".csv"), row.names = TRUE) }
这样修改后,每次筛选的都是真实存在的 mall 值,导出的CSV就会有对应的数据啦!
内容的提问来源于stack exchange,提问作者Yogesh Kumar
相关产品推荐
相关产品推荐

