如何使用SPLIT在R中保存不同的文件

时间:2017-05-17 16:49:47

标签: r split save

我有一个数据框,我想根据变量的值保存为不同的.csv文件。

遵循数据框中的一些示例行和列:

PPT     INDEX
ppt01   12
ppt01   13
ppt01   16
ppt01   16
ppt01   17
ppt01   18
ppt01   18
ppt01   19
ppt01   19
ppt01   23
ppt01   24
ppt01   24
ppt01   26
ppt01   27
ppt02   12
ppt02   13
ppt02   16
ppt02   16
ppt02   17
ppt02   27
ppt02   28
ppt02   29
ppt02   30
ppt02   30
ppt02   31
ppt03   12
ppt03   13
ppt03   16
ppt03   16
ppt03   17
ppt03   31
ppt03   32
ppt03   32
ppt03   33

我想基于 PPT 列将数据框保存到不同的文件中。例如:“newfile_ppt01.csv”

PPT     INDEX
ppt01   12
ppt01   13
ppt01   16
ppt01   16
ppt01   17
ppt01   18
ppt01   18
ppt01   19
ppt01   19
ppt01   23
ppt01   24
ppt01   24
ppt01   26
ppt01   27

“newfile_ppt02.csv”

PPT     INDEX
ppt02   12
ppt02   13
ppt02   16
ppt02   16
ppt02   17
ppt02   27
ppt02   28
ppt02   29
ppt02   30
ppt02   30
ppt02   31

依旧......

2 个答案:

答案 0 :(得分:0)

您可以遍历所有唯一的ppt并保存每一个:

for (ppt in unique(data$PPT)) {
  write.csv(data["PPT" == ppt,], file = paste0("newfile_", ppt, ".csv"))
}

答案 1 :(得分:0)

在R中,您应该始终避免for循环。始终建议使用apply系列中的函数。

假设您的数据采用以下格式:

df <- data.frame(
  PPT=c("ppt01", "ppt01", "ppt01", "ppt02", "ppt02", "ppt03", "ppt03", "ppt03"),
  INDEX=c(1,2,3,4,5,6,7,8)
)

factor转换为character

df$PPT <- as.character(df$PPT)

现在,您根据PPT列上的值分割数据:

df_list <- split(df, df$PPT)

使用lapply,您可以保存每个拆分数据:

lapply(seq_along(df_list), function(i){
  write.csv(df_list[[i]], paste0(df_list[[i]][1,1], ".csv"), row.names = FALSE)
})