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

时间:2016-11-04 10:24:39

标签: r dataframe split

我在列表中有data.frame对象,我打算用最后一列拆分它们。但是,我尝试使用split函数来完成此任务,现在每个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)))

我尝试按如下方式实现该功能:

splitMe <- function(list, ...) {
  # check input
  rslt <- lapply(list, function(x) {
    out <- split(x, ifelse(x$value >= 10, "save", "discard"))
    # intend to filter out discard data.frame and export it as csv file 
    # How Can I make this happen
    # while I intend to only return save data.frame from each as output of splitMe
  })
}

关于我的功能的骨架,我该​​如何让它完整?如何更有效地获得所需的输出?任何想法都表示赞赏。

1 个答案:

答案 0 :(得分:3)

这是一个功能:

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)
  }

您将filename和“C:/ DiscardedData /”的“testfile”形式的列表和字符串放入path

这样您丢弃的数据将保存为testfile_1.csv,testfile_2.csv等。

编辑:设置一个阈值,使其更具动态性。只需在函数调用中定义阈值即可。

另一个编辑:要使用此功能,只需调用ouput <- splitMe(dfList, filename = "discarded", path = "yourpath", threshold = 10)之类的内容,然后将您的路径插入yourpath