仅包含选定列的数据框上的唯一

Ina*_*Ina 65 r unique

我有一个大于100列的数据框,我会通过只比较两列来找到唯一的行.我希望这是一个简单的,但我无法与它uniqueduplicated我自己合作.

在下面,我想只使用id和id2唯一:

data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z"))

id id2 somevalue
1   1         x
1   1         y
3   4         z
Run Code Online (Sandbox Code Playgroud)

我想获得:

id id2 somevalue
1   1         x
3   4         z
Run Code Online (Sandbox Code Playgroud)

要么:

id id2 somevalue
1   1         y
3   4         z
Run Code Online (Sandbox Code Playgroud)

(我没有偏好保留哪些唯一行)

jor*_*ran 106

好吧,如果你选择的非重复列中的哪个值无关紧要,这应该很简单:

dat <- data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z"))
> dat[!duplicated(dat[,c('id','id2')]),]
  id id2 somevalue
1  1   1         x
3  3   4         z
Run Code Online (Sandbox Code Playgroud)

duplicated通话中,我只是传递那些dat我不想重复的列.此代码将自动始终选择任何不明确的值中的第一个.(在这种情况下,x.)


小智 13

使用unique():

dat <- data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z"))    
dat[row.names(unique(dat[,c("id", "id2")])),]
Run Code Online (Sandbox Code Playgroud)


sbh*_*bha 12

以下是一些dplyr基于列id和id2保留非重复行的选项:

library(dplyr)                                        
df %>% distinct(id, id2, .keep_all = TRUE)
df %>% group_by(id, id2) %>% filter(row_number() == 1)
df %>% group_by(id, id2) %>% slice(1)
Run Code Online (Sandbox Code Playgroud)

  • 我想没有理由考虑使用'distinct`的替代品 (3认同)