如何写入每个拆分块的 csv?
How to write to csv each split chunk?
我有使用 split
:
的列表数据
x <- split(A, f = A$Col_1)
效果很好。但现在我需要将拆分的每个块写入一个单独的 .csv。有 2100 个块,每个块 140 行。我们称它们为“1:2100”。我想创建一些东西,将“1”写入“~/full_path_name/A1.csv”,然后转到“2”并写入“~/full_path_name/A2.csv”,然后将“3”写入“~/full_path_name/A3.csv"等
我包含了 "~/full_path_name/"
,因为以后这个路径名会因使用相同代码的其他数据而改变,为了我自己的理解,我需要在代码中看到它。我不知道如何写一个我要求别人更正的小样本,因为我根本不知道怎么写。
有人可以就如何做到这一点提出建议吗?谢谢。
我才编码一个月,完全是自学成才。我没有其他编码程序的背景。除了这里,我没有人可以寻求帮助。我对术语很困惑,所以请理解我是否以正确的方式提问,如果需要我会尝试更正它。
编辑,在做一些进一步的研究后 --
这是我在@RichPaloo 的 SO 上的其他地方找到的,以及我在下面的改编:
#example data.frame
df <- data.frame(x = 1:4, y = c("a", "a", "b", "b"))
#split into a list by the y column
l <- split(df, df$y)
#the names of the list are the unique values of the y column
nam <- names(l)
#iterate over the list and the vector of list names and write csvs
for(i in 1:length(l)) {
write_csv(l[[i]], paste0(nam[i], ".csv"))
}
这是我的版本:
bcc4.5_WINTER <- split(bcc4.5_FinalWinterRO, f = bcc4.5_FinalWinterRO$HUC8)
nam <- names(bcc4.5_WINTER)
for(i in 1:length(bcc4.5_WINTER)) {
write_csv(bcc4.5_WINTER[[i]], paste0(“~/Rprojects/BCC_CSM1_1_RCP_45/Winter/”, nam[i], “.csv”))
}
我的主文件夹“/BCC_CSM1_1_RCP_45/Winter/”中的文件夹似乎有问题它在两端都显示“意外令牌”,但在“~Rprojects”处却没有。我可以不发送一些东西吗到我的主文件夹中的文件夹?
它还在“.csv”附近的引号下方显示红线。我不知道这是怎么回事,因为这正是那个人成功使用的东西,显然,在另一个 post 中。谢谢。
调查潜在的拼写错误问题
请看下面两行:
write.csv(l[[1]], file = paste0("./a_folder/", names(l)[1], ".csv"))
write.csv(l[[1]], file = paste0(“./a_folder/”, names(l)[1], “csv”))
第 1 行将保存文件。请注意 "./a_folder/"
和 ".csv"
被视为文本。
第 2 行 “./a_folder/”
和 “.csv”
未被识别为文本。第 2 行产生错误:unexpected input in " write.csv(l[[1]], file = paste0(“"
RStudio 为您的代码着色以帮助您解决此问题。
关于不使用 for
循环的想法。
我认为一种更好的方法(特别是当你有大数据集时)是使用 lapply
或 mapply
。这些函数的作用是获取列表的每个“块”并对其应用一个函数。
As lapply
在处理每个块时丢失了它的名称。当您想使用块的名称来命名计算机上的文件时,这可能会很烦人。 mapply()
处理这种情况就得心应手了。
这是使用提供的示例的示例。
# example data.frame
df <- data.frame(x = 1:4, y = c("a", "a", "b", "b"))
# split df
l <- split(df, df$y)
# save each "chunk" of l as a .csv file on a hard drive
# 1st, create a function that takes a "chunk" of your list and its name as inputs
save_fun <- function(l_i, name_i) {
print(l_i) # print the output in console
write.csv(l_i, file = paste0("./a_folder/", name_i, ".csv")) # save the file on your computer
}
# 2nd, use mapply (and not a list) to use the previous function on each pair chunk/name
mapply(FUN = save_fun, l_i = l, name_i = names(l), SIMPLIFY = FALSE) # see ?mapply for how to use mapply()
所以,上面的代码示例 (@Paul) 工作,除了 df[l] 没有被迭代,所以我从每个 l
实例中删除了 _i
。我遇到的最后一个问题(在上面的评论中)是因为路径名不完整。
我使用 fwrite()
而不是 write.csv
因为它在我与错误作斗争时给了我更好的反馈。这给了我我需要的东西:
#split file into chunks by names within a row, in this case row "BBB"
df <- split(old_df, f = old_df$BBB)
#将这些块写入单独的 .csv 文件,名称为每个块的名称
save_fun <- function(df, name_i) {
fwrite(df, file = paste0("~/Desktop/projects_folder/", name_i, ".csv"))
}
#将文件保存到您的计算机上
mapply(FUN = save_fun, df, name_i = names(df), SIMPLIFY = FALSE)
非常感谢保罗。
我有使用 split
:
x <- split(A, f = A$Col_1)
效果很好。但现在我需要将拆分的每个块写入一个单独的 .csv。有 2100 个块,每个块 140 行。我们称它们为“1:2100”。我想创建一些东西,将“1”写入“~/full_path_name/A1.csv”,然后转到“2”并写入“~/full_path_name/A2.csv”,然后将“3”写入“~/full_path_name/A3.csv"等
我包含了 "~/full_path_name/"
,因为以后这个路径名会因使用相同代码的其他数据而改变,为了我自己的理解,我需要在代码中看到它。我不知道如何写一个我要求别人更正的小样本,因为我根本不知道怎么写。
有人可以就如何做到这一点提出建议吗?谢谢。
我才编码一个月,完全是自学成才。我没有其他编码程序的背景。除了这里,我没有人可以寻求帮助。我对术语很困惑,所以请理解我是否以正确的方式提问,如果需要我会尝试更正它。
编辑,在做一些进一步的研究后 --
这是我在@RichPaloo 的 SO 上的其他地方找到的,以及我在下面的改编:
#example data.frame
df <- data.frame(x = 1:4, y = c("a", "a", "b", "b"))
#split into a list by the y column
l <- split(df, df$y)
#the names of the list are the unique values of the y column
nam <- names(l)
#iterate over the list and the vector of list names and write csvs
for(i in 1:length(l)) {
write_csv(l[[i]], paste0(nam[i], ".csv"))
}
这是我的版本:
bcc4.5_WINTER <- split(bcc4.5_FinalWinterRO, f = bcc4.5_FinalWinterRO$HUC8)
nam <- names(bcc4.5_WINTER)
for(i in 1:length(bcc4.5_WINTER)) {
write_csv(bcc4.5_WINTER[[i]], paste0(“~/Rprojects/BCC_CSM1_1_RCP_45/Winter/”, nam[i], “.csv”))
}
我的主文件夹“/BCC_CSM1_1_RCP_45/Winter/”中的文件夹似乎有问题它在两端都显示“意外令牌”,但在“~Rprojects”处却没有。我可以不发送一些东西吗到我的主文件夹中的文件夹?
它还在“.csv”附近的引号下方显示红线。我不知道这是怎么回事,因为这正是那个人成功使用的东西,显然,在另一个 post 中。谢谢。
调查潜在的拼写错误问题
请看下面两行:
write.csv(l[[1]], file = paste0("./a_folder/", names(l)[1], ".csv"))
write.csv(l[[1]], file = paste0(“./a_folder/”, names(l)[1], “csv”))
第 1 行将保存文件。请注意 "./a_folder/"
和 ".csv"
被视为文本。
第 2 行 “./a_folder/”
和 “.csv”
未被识别为文本。第 2 行产生错误:unexpected input in " write.csv(l[[1]], file = paste0(“"
RStudio 为您的代码着色以帮助您解决此问题。
关于不使用 for
循环的想法。
我认为一种更好的方法(特别是当你有大数据集时)是使用 lapply
或 mapply
。这些函数的作用是获取列表的每个“块”并对其应用一个函数。
As lapply
在处理每个块时丢失了它的名称。当您想使用块的名称来命名计算机上的文件时,这可能会很烦人。 mapply()
处理这种情况就得心应手了。
这是使用提供的示例的示例。
# example data.frame
df <- data.frame(x = 1:4, y = c("a", "a", "b", "b"))
# split df
l <- split(df, df$y)
# save each "chunk" of l as a .csv file on a hard drive
# 1st, create a function that takes a "chunk" of your list and its name as inputs
save_fun <- function(l_i, name_i) {
print(l_i) # print the output in console
write.csv(l_i, file = paste0("./a_folder/", name_i, ".csv")) # save the file on your computer
}
# 2nd, use mapply (and not a list) to use the previous function on each pair chunk/name
mapply(FUN = save_fun, l_i = l, name_i = names(l), SIMPLIFY = FALSE) # see ?mapply for how to use mapply()
所以,上面的代码示例 (@Paul) 工作,除了 df[l] 没有被迭代,所以我从每个 l
实例中删除了 _i
。我遇到的最后一个问题(在上面的评论中)是因为路径名不完整。
我使用 fwrite()
而不是 write.csv
因为它在我与错误作斗争时给了我更好的反馈。这给了我我需要的东西:
#split file into chunks by names within a row, in this case row "BBB"
df <- split(old_df, f = old_df$BBB)
#将这些块写入单独的 .csv 文件,名称为每个块的名称
save_fun <- function(df, name_i) {
fwrite(df, file = paste0("~/Desktop/projects_folder/", name_i, ".csv"))
}
#将文件保存到您的计算机上
mapply(FUN = save_fun, df, name_i = names(df), SIMPLIFY = FALSE)
非常感谢保罗。