R - 根据两列

时间:2016-03-11 22:39:56

标签: r

使用R. Base包,dplyr或data.table都可以使用。我的数据是~1000行×20列。我期待大约300个重复。

我想做类似以下的事情,但有一个改动:

Match/group duplicate rows (indices)

我想找到,不是完全重复的行,而是在两列中重复的行。 例如,给定此输入表:

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& amp;中查找重复项仅限ID,我最终会得到下表:

File     T.N     ID     Col1     Col2
BAI.txt   T      1       sdaf    eiri
BBK.txt   T      1       ter     ase

4 个答案:

答案 0 :(得分:13)

以下是使用duplicated两次的选项,第二次使用fromLast = TRUE选项,因为它仅从重复值on-wards返回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

答案 1 :(得分:3)

只需使用选定的列创建要在

上进行子集化的索引
data<-read.csv()
data<-data[which(duplicated(data[,c('T.N','ID")])==T),]

答案 2 :(得分:2)

我发现这是一种简单而有用的方法。

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)

输出:

# 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  

答案 3 :(得分:0)

一个简单的解决方案是find_duplicates中的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)

返回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