2016-08-27 88 views
-2

我在嘗試子集某些數據,但在此部分獲得了庫存。我的數據是這樣的:查找具有相同值的行在不同列中的行對

structure(list(sym_id = structure(c(1L, 2L, 2L, 2L, 2L, 
2L, 3L, 3L, 4L, 5L, 5L), .Label = c("AOL.HH", "ARCH.GA", "ARCH.GK", 
"T.GJ", "T.GK"), class = "factor"), comp = structure(c(1L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L), .Label = c("AOL", "ARCH", 
"T"), class = "factor"), seq_nb = c(18327L, 9952L, 39808L, 
56601L, 44974L, 55302L, 20023L, 24403L, 15529L, 46202L, 57269L 
), orig_seq_nb = c(81261L, 72161L, 9952L, 
1276L, 98216L, 16423L, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_)), .Names = c("bond_sym_id", 
"company_symbol", "seq_nb", "orig_seq_nb"), row.names = c(NA, 
-11L), class = c("tbl_df", "tbl", "data.frame")) 

我在尋找,會給我帶回其在另一個不同列中相同的值也相同值的行代碼。 輸出應該給我回

Row1 ARCH.GA ARCH 9952 72161 

Row2 ARCH.GA ARCH 39808 9952 

正如你所看到的,列「sym_ID」和「補償」是等於爲我所需的輸出,並在「seq_nb」和「orig_seq_nb」匹配的值。

感謝您的幫助!

回答

0

我們亞組第3和第4列,通過行循環,order數據集,得到了第1個要素,cbind與前兩列,使用duplicated查找重複元素的邏輯索引,這可以用於子集'df1'的行。

d2 <- cbind(df1[1:2], apply(df1[3:4],1, function(x) x[order(x)][1])) 
df1[duplicated(d2)|duplicated(d2, fromLast=TRUE),] 
# bond_sym_id company_symbol seq_nb orig_seq_nb 
#  <fctr>   <fctr> <int>  <int> 
#1  ARCH.GA   ARCH 9952  72161 
#2  ARCH.GA   ARCH 39808  9952 
+0

謝謝,它適用於小數據集! 當我想將這段代碼應用到更大的數據集時,有沒有辦法將cbind命令擴展到其他列?如果cbind和apply命令的列不相鄰,我該如何繼續? – fabiusw

+0

@fabiusw創建一個你想要訂購的列的索引。例如,如果你想要命令說,'1,5,13,​​15等等,'nm1 < - c(1,5,13,15); nm2 < - setdiff(seq(ncol(df1)),nm1); d2 < - cbind(df1 [nm2],apply(df1 [nm1],1,function(x)x [order(x)] [1]))'並執行'duplicateated'步驟。在您的原始數據集中,我不確定是否需要獲取第一個元素,即'x [order(x)] [1]' – akrun

相關問題