dplyr을 사용하여 중복된 행 제거
이런 data.frame을 가지고 있습니다.
set.seed(123)
df = data.frame(x=sample(0:1,10,replace=T),y=sample(0:1,10,replace=T),z=1:10)
> df
x y z
1 0 1 1
2 1 0 2
3 0 1 3
4 1 1 4
5 1 0 5
6 0 1 6
7 1 0 7
8 1 0 8
9 1 0 9
10 0 1 10
처음 두 열을 기준으로 중복 행을 제거하려고 합니다.예상 출력 -
df[!duplicated(df[,1:2]),]
x y z
1 0 1 1
2 1 0 2
4 1 1 4
나는 특히 다음을 사용하는 솔루션을 찾고 있습니다.dplyr
꾸러미
다음은 다음을 사용하는 솔루션입니다.dplyr >= 0.5
.
library(dplyr)
set.seed(123)
df <- data.frame(
x = sample(0:1, 10, replace = T),
y = sample(0:1, 10, replace = T),
z = 1:10
)
> df %>% distinct(x, y, .keep_all = TRUE)
x y z
1 0 1 1
2 1 0 2
3 1 1 4
참고:dplyr
이제 를 포함합니다.distinct
이 목적을 위한 기능.
아래의 원답:
library(dplyr)
set.seed(123)
df <- data.frame(
x = sample(0:1, 10, replace = T),
y = sample(0:1, 10, replace = T),
z = 1:10
)
한 가지 접근 방식은 그룹화하고 첫 번째 행만 유지하는 것입니다.
df %>% group_by(x, y) %>% filter(row_number(z) == 1)
## Source: local data frame [3 x 3]
## Groups: x, y
##
## x y z
## 1 0 1 1
## 2 1 0 2
## 3 1 1 4
(Inplyr 0.2에서는 더미가 필요하지 않습니다.z
가변적이고 그냥 쓸 수 있을 것입니다.row_number() == 1
)
나는 또한 추가하는 것에 대해 생각해왔습니다.slice()
다음과 같은 기능을 제공합니다.
df %>% group_by(x, y) %>% slice(from = 1, to = 1)
또는 의 변형일 수도 있습니다.unique()
사용할 변수를 선택할 수 있습니다.
df %>% unique(x, y)
완전성을 위해 다음과 같은 기능도 합니다.
df %>% group_by(x) %>% filter (! duplicated(y))
하지만, 저는 다음을 사용하는 솔루션을 선호합니다.distinct
그게 더 빠를 수도 있어요
대부분의 경우 최고의 솔루션은distinct()
이미 제안한 대로 dplyr에서.
하지만, 여기에 다음과 같은 방법이 있습니다.slice()
dplyr에서 기능합니다.
# Generate fake data for the example
library(dplyr)
set.seed(123)
df <- data.frame(
x = sample(0:1, 10, replace = T),
y = sample(0:1, 10, replace = T),
z = 1:10
)
# In each group of rows formed by combinations of x and y
# retain only the first row
df %>%
group_by(x, y) %>%
slice(1)
사용하는 것과 다른 점distinct()
기능.
이 솔루션의 장점은 원래 데이터 프레임에서 유지되는 행을 명시적으로 지정하고 데이터 프레임과 원활하게 쌍을 구성할 수 있다는 것입니다.arrange()
기능.
고객 판매 데이터가 있고 고객당 하나의 레코드를 유지하고자 하는 경우 해당 레코드를 최근에 구입한 레코드로 하려고 합니다.그런 다음 다음과 같이 쓸 수 있습니다.
customer_purchase_data %>%
arrange(desc(Purchase_Date)) %>%
group_by(Customer_ID) %>%
slice(1)
축소된 데이터 집합에 대해 R의 열을 선택할 때 중복되는 경우가 많습니다.
이 두 선은 동일한 결과를 제공합니다.각 열은 두 개만 선택된 고유한 데이터 세트를 출력합니다.
distinct(mtcars, cyl, hp);
summarise(group_by(mtcars, cyl, hp));
중복된 행을 찾으려면 사용할 수 있습니다.find_duplicates
부터hablar
:
library(dplyr)
library(hablar)
df <- tibble(a = c(1, 2, 2, 4),
b = c(5, 2, 2, 8))
df %>% find_duplicates()
언급URL : https://stackoverflow.com/questions/22959635/remove-duplicated-rows-using-dplyr
'programing' 카테고리의 다른 글
Firebase 저장소:디렉터리를 삭제하는 방법 (0) | 2023.06.05 |
---|---|
R 사용자 전문가, 의 기능.R 프로파일? (0) | 2023.06.05 |
종료 메시지 작성 방법 (0) | 2023.06.05 |
루비의 문자열 이름으로 클래스 인스턴스를 만들려면 어떻게 해야 합니까? (0) | 2023.06.05 |
onActivityResult가 fragment에서 호출되지 않습니다. (0) | 2023.06.05 |