簡體   English   中英

如何找到存在重復對的行索引

[英]How to find row indices where duplicated pairs exist

我有一個data.frames列表,每個data.frame是具有相同格式的單獨輸出。 我可以將它們全部合並到一個主列表中

master <- do.call("rbind", list)

我特別想在兩列(1和3)中找到重復項,我這樣做是

unique.pairs <- unique(master[duplicated(master[,c(1,3)]),c(1,3)])

這將給我一個唯一的第1、3對配對的data.frame。

現在,我想為每個唯一對查找該對的其他實例在哪里。 理想的輸出將是data.frame,其中一列包含配對(可以將字符串連接為一列),另一列包含來自master的行名(可以通過我嘗試查找的重復索引輕松獲得),其中存在重復項

一個虛擬的示例(簡化為感興趣的兩列):

master <- data.frame(A=c(1,1,2,2,3,3,4,4,5,5), B=c(1,2,3,3,4,5,6,6,7,8))
unique.pairs <- unique(master[duplicated(master,c(1,2)]),c(1,2)])

現在,我希望能夠像這樣制作一個data.frame:

results <- data.frame(instance=c("2->3","4->6"), indices=c("3,4","7,8"))

我在想您遍歷每對unique.pairs然后找到master對中該對的位置,但我無法弄清楚語法。

使用data.table,您可以執行...

library(data.table)
setDT(master)

master[master[, .N, by=names(master)][ N > 1L ], on=names(master), 
  .(N, locs = .(.I)), by=.EACHI]

#    A B N locs
# 1: 2 3 2  3,4
# 2: 4 6 2  7,8

注意,我們甚至不需要構造諸如unique.pairs類的對象。

N是重復次數。 您可以僅使用.(locs = .(.I))從輸出中將其忽略。

在我看來,您的unique.pairs構造中存在錯誤,因此我提供了以下替代方法:

 unique.pairs <- unique( master[ duplicated(master) ,c(1,2)])

然后使用它來構造您的第一類向量:

 grps <- apply( master, 1, function(x) if ( any( duplicated( rbind(unique.pairs, x))) ) { paste(x[1],x[2], sep="->")}else{NA} + )
 grps

#[1] NA     NA     "2->3" "2->3" NA     NA     "4->6" "4->6" NA     NA    

然后,您可以使用該向量對其他感興趣的項進行分組:

> locs <- tapply( rownames(master), grps, function(x) paste(x, collapse=",") )
> as.data.frame(locs)
     locs
2->3  3,4
4->6  7,8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM