2016-08-27 25 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」と「COMP」は私の所望の出力および「seq_nb」と「orig_seq_nb」試合中の値の等しい私に与える必要があります。

ありがとうございました!

答えて

0

私たちは、3番目と4番目の列、行をループ、orderを持つデータセットのサブセットを第一の要素は、最初の2つの列を持つ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)] [)]) 'を実行し、' duplicated'ステップを実行します。元のデータセットでは、最初の要素を取得する必要があるかどうかはわかりません。つまり、 'x [order(x)] [1]' – akrun

関連する問題