如何解决如何将每个拆分块写入csv?
我有使用 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 的其他地方找到的,以及我在下面的改编:
#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”周围的引号下显示红线。我不知道该怎么做,因为这正是该人在另一篇文章中成功使用的内容。谢谢。
解决方法
因此,除了 df[l] 没有被迭代之外,上面的代码示例 (@Paul) 可以工作,所以我从每个 _i
实例中删除了 l
。我遇到的最后一个问题(在上面的评论中)是因为路径名不完整。
我使用了 fwrite()
而不是 write.csv
,因为当我在错误中挣扎时,它给了我更好的反馈。这给了我我需要的东西:
#将文件按行内的名称拆分成块,在本例中为行“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)
非常感谢保罗。
,调查潜在的拼写错误
请看下面两行:
write.csv(l[[1]],file = paste0("./a_folder/",names(l)[1],".csv"))
write.csv(l[[1]],file = paste0(“./a_folder/”,“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,".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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。