我将inputList
提供给我的自定义函数,在几个工作流程(几个简单的过滤)后,我最终得到data.frame resultDF
,需要重新启动。我使用relist
使resultDF
具有与inputList
相同的结构,但我收到了错误。有没有最简单的方法来重新resultDF
?谁能指出我如何实现这一目标?任何的想法?抱歉这个简单的问题。
以下是列表中的输入data.frame:
inputList <- list(
bar=data.frame(from=c(8,18,33,53),
to=c(14,21,39,61), val=c(48,7,10,8)),
cat=data.frame(from=c(6,15,20,44),
to=c(10,17,34,51), val=c(54,21,14,12)),
foo=data.frame(from=c(11,43), to=c(36,49), val=c(49,13)))
在几个工作流程之后,我最终得到了这个data.frame:
resultDF <- data.frame(
from=c(53,8,6,15,11,44,43,44,43),
to=c(61,14,10,17,36,51,49,51,49),
val=c(8,48,54,21,49,12,13,12,13)
)
我需要使用resultDF
的相同结构重新inputList
。我使用了relit
方法,但是我收到了错误。
这是我想要的清单:
desiredList <- list(
bar=data.frame(from=c(8,53), to=c(14,61), val=c(48,8)),
cat=data.frame(from=c(6,15,44,44), to=c(10,17,51,51), val=c(54,21,12,12)),
foo=data.frame(from=c(11,43,43), to=c(36,49,49), val=c(49,13,13))
)
如何实现desiredList
?在此先感谢:)
答案 0 :(得分:2)
我们可以遍历&#39; inputList&#39;并检查&#39; resultDF&#39;中的paste
d行元素是%in%
list
个元素,并使用该索引来对结果进行子集化&#39;
lapply(inputList, function(x) resultDF[do.call(paste, resultDF) %in% do.call(paste, x),])
另一个选项是join
,然后是split
。我们rbind
输入列表&#39;到data.table
添加一栏&#39; grp&#39;使用&#39; resultDF&#39;指定list
名称,join
on
&#39; resultDF&#39;的列名称,最后split
数据集使用了&#39; grp&#39;专栏
library(data.table)
dt <- rbindlist(inputList, idcol = "grp")[resultDF, on = names(resultDF)]
split(dt[,-1, with = FALSE], dt$grp)