R은

2017-01-23 3 views
0

내가 R을 사용하고 하나 개의 컬럼 값이 다르지만 다른 4 열 값 같은과 dataframe의 행을 찾기 위해 노력하고있어 중복R은

rn c1 c2 c3 c4 c5 c6 
1 t a b c d e 
2 f a b c d g 
3 t 1 2 3 4 5 
4 t 1 2 3 4 5 
5 t 1 2 3 4 5 
6 f a b c d e 
7 f a b c d e 
8 t a b c d e 

그래서이 경우 행만 : 1. 또한 열 C2-C5 2 중복 값이하지만 남아 C1 에서 상이한 값을 갖는다.

rn c1 c2 c3 c4 c5 c6 
1 t a b c d e 
2 f a b c d g 
6 f a b c d e 
7 f a b c d e 
8 t a b c d e 

어쨌든 그렇게 할 수 있습니까?

감사

+0

입니다 그들의 전임자와 다른가? 그게 맞습니까? – JWLM

답변

0

우리는 data.table를 사용할 수 있습니다. c2에서 c5 (names(df1)[3:6]), ifunique (uniqueN) 요소의 length이 1보다 큰 열로 그룹화 된 'data.frame'을 'data.table'(setDT(df1))로 변환하면 (.SD)

data.table
library(data.table) 
setDT(df1)[, if(uniqueN(c1)>1) .SD, c(names(df1)[3:6])][, names(df1), with= FALSE] 
# rn c1 c2 c3 c4 c5 c6 
#1: 1 t a b c d e 
#2: 2 f a b c d g 
#3: 6 f a b c d e 
#4: 7 f a b c d e 
#5: 8 t a b c d e 

dplyr에 해당하는 옵션은 귀하의 질문에 고정 행의 첫 번째 세트를 중복 행 내려 오는 그것은 나에게 보인다

library(dplyr) 
df1 %>% 
    group_by_(.dots = names(df1)[3:6]) %>% 
    filter(n_distinct(c1) > 1) 
#  rn c1 c2 c3 c4 c5 c6 
# <int> <chr> <chr> <chr> <chr> <chr> <chr> 
#1  1  t  a  b  c  d  e 
#2  2  f  a  b  c  d  g 
#3  6  f  a  b  c  d  e 
#4  7  f  a  b  c  d  e 
#5  8  t  a  b  c  d  e