在拆分列表中的data.frame时,如何使输出更加优雅?

在拆分列表中的data.frame时,如何使输出更加优雅?,r,dataframe,split,R,Dataframe,Split,我在列表中有data.frame对象,我打算按其最后一列拆分它们。然而,我尝试使用split函数来完成这个任务,现在每个data.frame都有两个子集。我的下一个尝试是按名称从每个子data.frame中筛选出子data.frame,而data.frame的其余部分可以由函数返回,更准确地说,是从嵌套列表中筛选出已保存的data.frame作为返回的输出。有谁能帮我以更舒适的方式完成这项任务?我可能会采取什么行动?有没有办法让输出得到很好的体现?提前谢谢 快速重现示例: dfList <

我在列表中有data.frame对象,我打算按其最后一列拆分它们。然而,我尝试使用split函数来完成这个任务,现在每个data.frame都有两个子集。我的下一个尝试是按名称从每个子data.frame中筛选出子data.frame,而data.frame的其余部分可以由函数返回,更准确地说,是从嵌套列表中筛选出已保存的data.frame作为返回的输出。有谁能帮我以更舒适的方式完成这项任务?我可能会采取什么行动?有没有办法让输出得到很好的体现?提前谢谢

快速重现示例:

dfList <- list(hola= data.frame( start=seq(1, by=4, len=15), to=seq(3, by=4, len=15), value=sample(30, 15)),
               boo = data.frame( start=seq(3, by=7, len=20), to=seq(6, by=7, len=20), value=sample(30, 20)),
               meh = data.frame( start=seq(4, by=8, len=25), to=seq(7, by=8, len=25), value=sample(30, 25)))
dfList这里有一个函数:

splitMe <- function(list, filename, path, threshold...) {
  out <- lapply(list, subset, value>=threshold)
  csv <- lapply(list, subset, value<threshold)
  mapply(function(x, y) write.csv(x, paste0(path, filename, "_", y, ".csv")), csv, c(1:length(list)))
  return(out)
  }

splitMe在我看来很好,也许你可以将
ifelse
改为
lappy(dfList,函数(x)集合名(split(x,x$value>=10),c('discard','save'))
好吧,你可以使用类似于'split=threshold,1,2'))的东西,但这会再次给你留下两个数据帧的嵌套列表,然后您可能需要使用另一个apply构造再次破坏它。在我看来,使用两个lappy调用是最简单的。与其在函数中使用两次lappy,还有没有机会更优雅地对数据进行拆分?谢谢
split=threshold,1,2))
很抱歉,找不到编辑我的评论的选项。您还可以使用
函数(列表、文件名、路径、阈值、值)在函数调用中定义
在使用函数时更加动态。我仍然不明白为什么在回答中使用filename参数?我可以使用dir.create(“~/”)来设置路径。有没有可能使代码更兼容?
splitMe <- function(list, filename, path, threshold...) {
  out <- lapply(list, subset, value>=threshold)
  csv <- lapply(list, subset, value<threshold)
  mapply(function(x, y) write.csv(x, paste0(path, filename, "_", y, ".csv")), csv, c(1:length(list)))
  return(out)
  }