我需要使用阈值评估列表中的data.frame,打算获取需要导出为csv
个文件的新data.frame组。但是,在我使用给定阈值对每个data.frame进行分类后,结果将变为嵌套列表。也许,我必须将这些结果嵌套列表作为data.frame列表进行操作,然后遍历data.frame列表以将它们导出为csv
个文件。我使用reshape2
来融合生成的嵌套列表,但不知道如何根据需要对它们进行分组并以所需方式导出它们。任何人都可以指出我更容易操纵嵌套列表来制作data.frame列表吗?我怎样才能做到这一点?有没有有效的方法来完成这项工作?非常感谢:)
这是可重现的输入data.frame列表:
myList <- list(
hotan = data.frame( begin=seq(1, by=6, len=25), end=seq(4, by=6, len=25), pos.score=sample(30, 25)),
aksu = data.frame( begin=seq(3, by=9, len=30), end=seq(6, by=9, len=30), pos.score=sample(45, 30)),
korla = data.frame( begin=seq(6, by=8, len=45), end=seq(11, by=8, len=45), pos.score=sample(52, 45))
)
我需要使用阈值评估每个data.frame,这会导致嵌套列表如下:
rslt <- lapply(myList, function(x) {
res <- split(x, ifelse(x$pos.score >=18, "good","bad"))
})
我尝试使用melt
删除嵌套列表结构:
library(reshape2)
melt(rslt)
或许,首先退出嵌套列表,将rslt
转换为data.frame列表,然后使用lapply
将每个文件导出为csv
个文件。好吗?
修改:
我知道使用unlist
来处理嵌套列表的一般方法,也许data.table
或dplyr
提供了更好的功能来处理这类问题。我想学习新的解决方案。感谢
我正在尝试实现此data.frame列表:
hotan.good
hotan.bad
aksu.good
aksu.bad
korla.good
korla.bad
如何实现需要导出为csv
文件的所需data.frame列表?我该如何操纵rslt
?
答案 0 :(得分:2)
为什么要使用数据框列表?您可以轻松地将所有数据放在一个数据框中:
library(dplyr)
df = bind_rows(myList, .id="name")
# new Variable threshold
df %>% mutate(threshold = ifelse(pos.score >=18, "good", "bad"))
现在您可以在此数据框中过滤和选择数据(甚至将其拆分为数据框列表。)
答案 1 :(得分:1)
将hotan.good.csv
,hotan.bad.csv
,aksu.good.csv
,...写入现有的./out/
文件夹:
library(magrittr)
l <- unlist(rslt, recursive = FALSE)
l %>%
names() %>%
lapply(FUN = function(f) write.csv(l[[f]], paste0("out/", f, ".csv"), row.names = FALSE)) %>%
invisible()
答案 2 :(得分:0)
如果我继续@MarkusN的解决方案(感谢他的帮助):
library(dplyr)
DF <- bind_rows(myList, .id="sample") %>%
mutate(threshold = ifelse(pos.score >=18, "good", "bad")) %>%
split(list(.$threshold,.$sample))
mapply(write.csv, DF, paste0(getwd(), names(DF), ".csv"))
通过这种方式,在嵌套列表中导出data.frame可以更加轻松高效。