R-基于两列查找并列出重复行
使用R.Base包、dplyr或data.table对我来说都可以使用。我的数据约为1000行x 20列。我预计大约有300份 我想做如下事情,但有一个改动: 我想找到,不是完全重复的行,而是在两列中重复的行。 例如,给定此输入表:R-基于两列查找并列出重复行,r,R,使用R.Base包、dplyr或data.table对我来说都可以使用。我的数据约为1000行x 20列。我预计大约有300份 我想做如下事情,但有一个改动: 我想找到,不是完全重复的行,而是在两列中重复的行。 例如,给定此输入表: File T.N ID Col1 Col2 BAI.txt T 1 sdaf eiri BAJ.txt N 2 fdd fds BBK.txt T 1
File T.N ID Col1 Col2
BAI.txt T 1 sdaf eiri
BAJ.txt N 2 fdd fds
BBK.txt T 1 ter ase
BCD.txt N 1 twe ase
如果我只想在T.N&ID中找到重复项,我会得到下表:
File T.N ID Col1 Col2
BAI.txt T 1 sdaf eiri
BBK.txt T 1 ter ase
只需使用所选列创建要在其上子集的索引
data<-read.csv()
data<-data[which(duplicated(data[,c('T.N','ID")])==T),]
data这里有一个选项,使用duplicated
两次,第二次以及fromLast=TRUE
选项,因为它仅从上一个重复值返回TRUE
dupe = data[,c('T.N','ID')] # select columns to check duplicates
data[duplicated(dupe) | duplicated(dupe, fromLast=TRUE),]
# File T.N ID Col1 Col2
#1 BAI.txt T 1 sdaf eiri
#3 BBK.txt T 1 ter ase
我发现这是一种简单而有用的方法
tr <- tribble(~File, ~TN, ~ID, ~Col1, ~Col2,
'BAI.txt', 'T', 1, 'sdaf', 'eiri',
'BAJ.txt', 'N', 2, 'fdd', 'fds',
'BBK.txt', 'T', 1, 'ter', 'ase',
'BCD.txt', 'N', 1, 'twe', 'ase')
group_by(tr, TN, ID) %>%
filter(n() > 1)
tr%
过滤器(n()>1)
输出:
# A tibble: 2 x 5
# Groups: TN, ID [1]
File TN ID Col1 Col2
<chr> <chr> <dbl> <chr> <chr>
1 BAI.txt T 1 sdaf eiri
2 BBK.txt T 1 ter ase
#一个tible:2 x 5
#分组:TN,ID[1]
文件TN ID Col1 Col2
1 BAI.txt T 1 sdaf eiri
2 BBK.txt T 1之三
一个简单的解决方案是从hablar
library(dplyr)
library(data.table)
library(hablar)
df <- fread("
File T.N ID Col1 Col2
BAI.txt T 1 sdaf eiri
BAJ.txt N 2 fdd fds
BBK.txt T 1 ter ase
BCD.txt N 1 twe ase
")
df %>%
find_duplicates(T.N, ID)
库(dplyr)
库(数据表)
图书馆(hablar)
df%
查找重复项(T.N,ID)
它返回T.N和ID中包含重复项的行:
File T.N ID Col1 Col2
<chr> <chr> <int> <chr> <chr>
1 BAI.txt T 1 sdaf eiri
2 BBK.txt T 1 ter ase
文件T.N ID Col1 Col2
1 BAI.txt T 1 sdaf eiri
2 BBK.txt T 1之三
这很有效。你忘了一个右括号。数据结果并不完全符合OPS的要求。这是迄今为止唯一一个似乎不会以随机单打结束的结果。其他人似乎对ID列是否匹配有问题,但T.N列不匹配(当我尝试真实数据时)。