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
이제이 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
(dplyr 0.2에서는 더미 z
변수 가 필요하지 않습니다. row_number() == 1
)
또한 slice()
다음과 같은 기능을 추가하는 것에 대해 생각했습니다 .
df %>% group_by(x, y) %>% slice(from = 1, to = 1)
또는 그 변형으로 unique()
사용할 변수를 선택할 수 있습니다.
df %>% unique(x, y)
다음을 사용하는 솔루션이 dplyr 0.3
있습니다.
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)
x y z
1 0 1 1
2 1 0 2
3 1 1 4
dplyr 0.5 용으로 업데이트
dplyr 버전 0.5의 기본 동작은 인수에 distinct()
지정된 열만 반환합니다 ...
.
원래 결과를 얻으려면 이제 다음을 사용해야합니다.
df %>% distinct(x, y, .keep_all = TRUE)
완전성을 위해 다음도 작동합니다.
df %>% group_by(x) %>% filter (! duplicated(y))
그러나 나는을 사용하는 솔루션을 선호하며 distinct
더 빠르다고 생각합니다.
축소 된 데이터 세트를 위해 R에서 열을 선택할 때 종종 중복으로 끝날 수 있습니다.
이 두 줄은 동일한 결과를 제공합니다. 각각은 두 개의 선택된 열만있는 고유 한 데이터 세트를 출력합니다.
distinct(mtcars, cyl, hp);
summarise(group_by(mtcars, cyl, hp));
대부분의 경우 최상의 솔루션은 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)
당신이 사용할 수있는 중복되는 행 찾으려는 경우 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
'IT' 카테고리의 다른 글
숫자를 거듭 제곱하는 C ++ 함수는 무엇입니까? (0) | 2020.07.30 |
---|---|
JavaScript의 Math.random은 무작위입니까? (0) | 2020.07.30 |
Node Multer 선택 필드 (0) | 2020.07.30 |
jquery 또는 javascript로 기본 URL을 얻는 방법은 무엇입니까? (0) | 2020.07.30 |
동적으로 내부 요소에 datepicker () 넣기 -JQuery / JQueryUI (0) | 2020.07.30 |