programing

중복된 행의 인덱스 찾기

javajsp 2023. 9. 11. 21:29

중복된 행의 인덱스 찾기

R에서 중복된 기능은 중복된 행 검색을 수행합니다.만약 우리가 중복을 제거하려면, 우리는 단지 글을 쓰면 됩니다.df[!duplicated(df),]데이터 프레임에서 중복이 제거됩니다.

하지만 복제된 데이터의 인덱스를 어떻게 찾을 수 있을까요? 만약에duplicated일부 행에서 TRUE를 반환하며, 이는 데이터 프레임에서 이러한 행이 두 번째로 발생하는 것이며 해당 인덱스를 쉽게 얻을 수 있음을 의미합니다.이 행의 첫 번째 발생 지수를 구하는 방법은?아니면, 다시 말해 중복된 행이 동일한 인덱스?

저는 data.frame에 대해 루프를 만들 수는 있겠지만, 이 질문에 대해 더 우아한 답이 있다고 생각합니다.

예는 다음과 같습니다.

df <- data.frame(a = c(1,2,3,4,1,5,6,4,2,1))

duplicated(df) | duplicated(df, fromLast = TRUE)
#[1]  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE

어떻게 돼가요?

함수를duplicated(df)원래 데이터에서 중복되는 요소를 결정합니다. 그fromLast = TRUE는 "해석은 반대쪽에서 고려해야 한다"는 것을 나타냅니다.두 개의 결과 논리 벡터는 다음을 사용하여 결합됩니다.|한 때부터TRUE그들 중 적어도 하나는 중복된 값을 나타냅니다.

가 있는 data.table을 사용하는 경우 다음과 같은 우아한 구문을 사용할 수 있습니다.

library(data.table)
DT <- data.table(A = rep(1:3, each=4), 
                 B = rep(1:4, each=3), 
                 C = rep(1:2, 6), key = "A,B,C")

DT[unique(DT[duplicated(DT)]),which=T]

짐 풀기

  • DT[duplicated(DT)]중복되는 행을 부분 집합화합니다.

  • unique(...)중복된 행의 고유한 조합만 반환합니다.중복(중복)이 1개 이상인 경우를 다룹니다.

  • DT[..., which = T]중복 행을 원본과 병합합니다.which=T행 번호 반환(없음)which = T데이터를 반환할 뿐입니다.).

사용할 수도 있습니다.

 DT[,count := .N,by = list(A,B,C)][count>1, which=T]

언급URL : https://stackoverflow.com/questions/12495345/find-indices-of-duplicated-rows