2017-01-23 5 views
0

複製見つける:Rは、1列同じですが、他の列は、私は1つの列値と同じで異なるが、他の4列値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])、ifuniqueuniqueN)要素の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 
関連する問題