我在列表中有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
})
}
关于我的功能的骨架,我该如何让它完整?如何更有效地获得所需的输出?任何想法都表示赞赏。
答案 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
。