在 for 循环中写入 .csv
Write .csv in a for loop
我想在 for 循环中写入 csv 文件。假设我有一个包含 3 行的数据框 data
,为了简单起见,一个变量 x
。最后,我希望我的输出是 200 个 .csv 文件,每个文件包含一行数据。数据的第一列是我的变量的标识("ID")。
另外,我的数据描述如下:
data:
ID x
[1] a 1
[2] b 2
[3] c 3
for (i in nrow(data)){
write.csv(data[i,2], file = paste0("Directory/", "data[i,1], ".csv"))
}
我 运行 此代码和一个 csv 文件已创建。但是,只创建了最后一行,这意味着我发现只有一个文件 c.csv
。
你知道我做错了什么吗?我以为它会自动创建所有档案。我应该先将结果保存在列表中,然后再导出吗?
无需使用循环。您可以使用 data.table
方法,这样会更高效、更快速。
library(data.table)
# create a column with row positions
setDT(dt)[, rowpos := .I]
# save each line of your dataset into a separate .csv file
dt[, write.csv(.SD, paste0("output_", rowpos,".csv")),
by = rowpos, .SDcols=names(dt) ]
让事情变得更快
# Now in case you're working with a large dataset and you want
# to make things much faster, you can use `fwrite {data.table}`*
dt[, fwrite(.SD, paste0("output_", rowpos ,".csv")),
by = rowpos, .SDcols=names(dt) ]
使用循环
# in case you still want to use a loop, this will do the work for you:
for (i in 1:nrow(dt)){
write.csv(dt[i,], file = paste0("loop_", i, ".csv"))
}
额外: 通过 groups 而不是 rows
保存 dataframe
的子集
# This line of code will save a separate `.csv` file for every ID
# and name the file according to the ID
setDT(dt)[, fwrite(.SD, paste0("output_", ID,".csv")),
by = ID, .SDcols=names(dt) ]
*
ps。请注意 fwrite
仍处于 data.table 1.9.7
的开发版本中。前往 here 查看安装说明。
我想在 for 循环中写入 csv 文件。假设我有一个包含 3 行的数据框 data
,为了简单起见,一个变量 x
。最后,我希望我的输出是 200 个 .csv 文件,每个文件包含一行数据。数据的第一列是我的变量的标识("ID")。
另外,我的数据描述如下:
data:
ID x
[1] a 1
[2] b 2
[3] c 3
for (i in nrow(data)){
write.csv(data[i,2], file = paste0("Directory/", "data[i,1], ".csv"))
}
我 运行 此代码和一个 csv 文件已创建。但是,只创建了最后一行,这意味着我发现只有一个文件 c.csv
。
你知道我做错了什么吗?我以为它会自动创建所有档案。我应该先将结果保存在列表中,然后再导出吗?
无需使用循环。您可以使用 data.table
方法,这样会更高效、更快速。
library(data.table)
# create a column with row positions
setDT(dt)[, rowpos := .I]
# save each line of your dataset into a separate .csv file
dt[, write.csv(.SD, paste0("output_", rowpos,".csv")),
by = rowpos, .SDcols=names(dt) ]
让事情变得更快
# Now in case you're working with a large dataset and you want
# to make things much faster, you can use `fwrite {data.table}`*
dt[, fwrite(.SD, paste0("output_", rowpos ,".csv")),
by = rowpos, .SDcols=names(dt) ]
使用循环
# in case you still want to use a loop, this will do the work for you:
for (i in 1:nrow(dt)){
write.csv(dt[i,], file = paste0("loop_", i, ".csv"))
}
额外: 通过 groups 而不是 rows
保存dataframe
的子集
# This line of code will save a separate `.csv` file for every ID
# and name the file according to the ID
setDT(dt)[, fwrite(.SD, paste0("output_", ID,".csv")),
by = ID, .SDcols=names(dt) ]
*
ps。请注意 fwrite
仍处于 data.table 1.9.7
的开发版本中。前往 here 查看安装说明。