我有一个大于100列的数据框,我会通过只比较两列来找到唯一的行.我希望这是一个简单的,但我无法与它unique或duplicated我自己合作.
在下面,我想只使用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)
| 归档时间: |
|
| 查看次数: |
87624 次 |
| 最近记录: |