在R中的选定列中跨行查找重复元素

贾卡布·扎兰(JakabZalán)

我试图获得一个新的数据框,其中包含许多选定列中的所有重复元素。因此,例如,如果我有以下df,我想按V2,V3,V4列搜索重复的元素。

V1  V2  V3  V4  V5
1   zz  aa  ee  213
2   aa  ff  xx  254
3   bb  hh  gg  235
4   zz  hh  hh  356
5   yy  cc  dd  796
6   ii  jj  kk  954

我想获取所有包含至少一个元素的行,这些元素与所选的其他列或行中的另一个元素重复。此外,R中的重复函数仅选择重复项,而忽略了“原始值”,我也想将其包括在内。

因此,最终的df如下所示:

V1  V2  V3  V4  V5
1   zz  aa  ee  213
2   aa  ff  xx  254
3   bb  hh  gg  235
4   zz  hh  hh  356
罗纳克·沙

使用基数R,我们可以unlist选择列(cols),获取duplicated值并选择具有这些值的行。

cols <- c('V2', 'V3', 'V4')

vals <- unlist(df[cols])
df[Reduce(`|`, lapply(df[cols], `%in%`, vals[duplicated(vals)])), ]

#  V1 V2 V3 V4  V5
#1  1 zz aa ee 213
#2  2 aa ff xx 254
#3  3 bb hh gg 235
#4  4 zz hh hh 356

数据

df <- structure(list(V1 = 1:6, V2 = structure(c(5L, 1L, 2L, 5L, 4L, 
3L), .Label = c("aa", "bb", "ii", "yy", "zz"), class = "factor"), 
V3 = structure(c(1L, 3L, 4L, 4L, 2L, 5L), .Label = c("aa", 
"cc", "ff", "hh", "jj"), class = "factor"), V4 = structure(c(2L, 
6L, 3L, 4L, 1L, 5L), .Label = c("dd", "ee", "gg", "hh", "kk", 
"xx"), class = "factor"), V5 = c(213L, 254L, 235L, 356L, 
796L, 954L)), class = "data.frame", row.names = c(NA, -6L))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章