Programing

선택한 열만있는 데이터 프레임에서 고유

lottogame 2020. 11. 24. 07:32
반응형

선택한 열만있는 데이터 프레임에서 고유


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

다음 중 하나를 얻고 싶습니다.

id id2 somevalue
1   1         x
3   4         z

또는:

id id2 somevalue
1   1         y
3   4         z

(유일한 행 중 어떤 행이 유지되는지 선호하지 않습니다)


좋습니다. 중복되지 않은 열에서 어떤 값을 선택하는지가 중요하지 않다면 매우 쉽습니다.

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

duplicated호출 내에서 dat중복을 원하지 않는 열만 전달합니다 . 이 코드는 항상 모호한 값 중 첫 번째을 자동으로 선택 합니다. (이 경우 x)


사용 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")])),]

다음은 dplyrid 및 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)

@Joran 코드의 사소한 업데이트.
아래 코드를 사용하면 모호함을 피하고 두 열의 고유 한 항목 만 가져올 수 있습니다.

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")])), c("id", "id2")]

참고 URL : https://stackoverflow.com/questions/9944816/unique-on-a-dataframe-with-only-selected-columns

반응형