중복 된 행의 인덱스 찾기
이 질문에 이미 답변이 있습니다.
R에서 중복 된 함수는 중복 행 검색을 수행합니다. 중복을 제거하려면 쓰기 만하면 df[!duplicated(df),]
데이터 프레임에서 중복이 제거됩니다.
그러나 중복 된 데이터의 인덱스를 찾는 방법은 무엇입니까? 경우 duplicated
어떤 행에서 TRUE 반환, 뜻이 데이터 프레임에서 같은 행의 선두로부터 초이며, 인덱스를 용이하게 얻을 수있다. 이 행의 첫 번째 발생 색인을 얻는 방법은 무엇입니까? 즉, 중복 된 행이 동일한 인덱스입니까?
data.frame에서 루프를 만들 수 있지만이 질문에 대한 더 우아한 대답이 있다고 생각합니다.
이것은 논리적 인덱스 벡터를 반환합니다.
duplicated(df) | duplicated(df[nrow(df):1, ])[nrow(df):1]
예를 들면 다음과 같습니다.
df <- data.frame(a = c(1,2,3,4,1,5,6,4,2,1))
duplicated(df) | duplicated(df[nrow(df):1, ])[nrow(df):1]
#[1] TRUE TRUE FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
which(duplicated(df) | duplicated(df[nrow(df):1, ])[nrow(df):1])
#[1] 1 2 4 5 8 9 10
업데이트 (주석 기반) : 함수 인수로 사용
하면 명령의 복잡성을 줄일 수 있습니다 fromLast = TRUE
. 이것은 두 개의 역 벡터를 만드는 것보다 쉽습니다.
duplicated(df) | duplicated(df, fromLast = TRUE)
duplicated(df) | duplicated(df, fromLast = TRUE)
#[1] TRUE TRUE FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
어떻게 작동합니까?
이 기능 duplicated
은 원래 데이터 프레임과 행 순서가 반대 인 데이터 프레임 모두에 적용됩니다. 후자의 출력이 다시 반전됩니다. 원래 데이터에서 중복 된 값의 첫 번째 발생은 반전 된 버전의 마지막 발생입니다. 그 후, 두 벡터는 둘 중 하나 이상이 중복 된 값을 나타 내기 |
때문에를 사용하여 결합됩니다 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 개 이상인 경우를 다룹니다 (중복, 예 : 3 중 등).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
'programing tip' 카테고리의 다른 글
접기가있는 notepad ++ 사용자 정의 영역 (0) | 2020.11.18 |
---|---|
Action에서 매개 변수를 어떻게 전달할 수 있습니까? (0) | 2020.11.18 |
CURLOPT_HTTPHEADER로 curl_setopt를 여러 번 호출하여 여러 헤더를 설정할 수 있습니까? (0) | 2020.11.18 |
empty () 벡터에 대해 begin () == end ()입니까? (0) | 2020.11.18 |
C #의 식에서 new Object ()와 new Object {}의 차이점은 무엇입니까? (0) | 2020.11.18 |