我有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