我有data.frame列表,需要应用非常具体的重复删除方法。我有理由对此data.frame列表使用特定的条件重复删除。但是,每个单独的data.frame的重复删除条件是不同的。我想为第一个列表元素完成重复删除;对于第二个列表元素,我需要搜索出现两次以上(freq> 2)的行,并且只保留一行;对于第三个列表元素,搜索出现三次以上(freq> 3)的行,并在该data.frame中保留两行。我正在尝试为此数据处理任务获得更多编程式动态解决方案。我试过我的镜头来获得很好的解决方案,但无法获得我想要的输出。我如何轻松地做到这一点?任何方式更有效地完成这项任务,尊重我的具体产出?请任何想法吗?如何将条件重复删除应用于data.frame列表?
重复性data.frame:
myList <- list(
bar= data.frame(start.pos=c(9,19,34,54,70,82,136,9,34,70,136,9,82,136),
end.pos=c(14,21,39,61,73,87,153,14,39,73,153,14,87,153),
pos.score=c(48,6,9,8,4,15,38,48,9,4,38,48,15,38)),
cat = data.frame(start.pos=c(7,21,21,72,142,7,16,21,45,72,100,114,142,16,72,114),
end.pos=c(10,34,34,78,147,10,17,34,51,78,103,124,147,17,78,124),
pos.score=c(53,14,14,20,4,53,20,14,11,20,7,32,4,20,20,32)),
foo= data.frame(start.pos=c(12,12,12,58,58,58,118,12,12,44,58,102,118,12,58,118),
end.pos=c(36,36,36,92,92,92,139,36,36,49,92,109,139,36,92,139),
pos.score=c(48,48,48,12,12,12,5,48,48,12,12,11,5,48,12,5))
)
因为myList
是自定义函数的结果,data.frame无法分离。我正在寻求更多的程序化解决方案来为我的数据做出特定的重复删除。如果输入是data.frame列表,我怎样才能做出特定的重复删除?
我的期望输出如下:
expectedList <- list(
bar= data.frame(start.pos=c(9,19,34,54,70,82,136),
end.pos=c(14,21,39,61,73,87,153),
pos.score=c(48,6,9,8,4,15,38)),
cat= data.frame(start.pos=c(7,21,72,142,7,16,45,100,114,142,16,114),
end.pos=c(10,34,78,147,10,17,51,103,124,147,17,124),
pos.score=c(53,14,20,4,53,20,11,7,32,4,20,32)),
foo= data.frame(start.pos=c(12,12,44,58,58,118,102,118,118),
end.pos=c(36,36,49,92,92,139,109,139,139),
pos.score=c(48,48,12,12,12,5,11,5,5))
)
编辑:
在第二data.framecat
,我要查找出现三次行,并保持只有行一旦;如果行出现两次,我不会做重复的删除。
for third data.frame foo
,我将检查出现三次以上的行,并保留两个相同的行。这是我想要为每个data.frame进行非常具体的重复删除。我怎样才能得到我的输出?
如何获取我想要的data.frame列表?我如何轻松地做到这一点?非常感谢 !
这是肯定要做,能但可能会有一些限制,这是多么的方案,除非有一个在逻辑明确的模式。我认为,对于每个列表项目,您总是希望将允许的重复项数增加1,对吧? –
您预期的'foo'输出看起来不正确。 '(118,139,5)'出现三次。 – bouncyball
不确定预期的输出是否正确。也许'library(data.table); Map(函数(x,y)setDT(x)[x [,.I [(1:.N)<= y],。(start.pos,end.pos,pos .score)] $ V1],myList,1:3)' – akrun