我正在使用R并尝试在数据框中查找行,其中一列值不同但其他4列值相同:
即
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 :(得分:0)
我们可以使用data.table
。转换' data.frame'到' data.table' (setDT(df1)
),按列c2到c5(names(df1)[3:6]
),if
length
(unique
)元素的uniqueN
分组' C1'大于1,我们将data.table(.SD
)
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