2016-08-27 68 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

相关问题