source

판독 가능한 방법으로 dplyr 개수의 고유 개수 가져오기

ittop 2023. 10. 4. 22:57
반응형

판독 가능한 방법으로 dplyr 개수의 고유 개수 가져오기

저는 dplyr를 사용하는 것이 처음이라 그룹 내의 고유값을 계산해야 합니다.표 예시는 다음과 같습니다.

data <- data.frame(aa = c(1, 2, 3, 4, NA), 
                   bb = c('a', 'b', 'a', 'c', 'c'))

저는 다음과 같은 일을 할 수 있다는 것을 알고 있습니다.

library(dplyr)

by_bb <- group_by(data, bb, add = TRUE)
summarise(by_bb, mean(aa, na.rm = TRUE), max(aa), sum(!is.na(aa)), length(aa))

하지만 만약 내가 독특한 요소들을 세고 싶다면?

할 수 있습니다.

  > summarise(by_bb, length(unique(unlist(aa))))

  bb length(unique(unlist(aa)))
1  a                          2
2  b                          1
3  c                          2

NA를 제외하고 싶다면 다음을 수행할 수 있습니다.

> summarise(by_bb,length(unique(unlist(aa[!is.na(aa)]))))

  bb length(unique(unlist(aa[!is.na(aa)])))
1  a                                      2
2  b                                      1
3  c                                      1

하지만 저는 조금 읽을 가 없어요.이런 식의 요약을 하는 더 좋은 방법이 있습니까?

이 옵션은 어떻습니까?

library(magrittr)

data %>%                    # take the data.frame "data"
  filter(!is.na(aa)) %>%    # Using "data", filter out all rows with NAs in aa 
  group_by(bb) %>%          # Then, with the filtered data, group it by "bb"
  summarise(Unique_Elements = n_distinct(aa)) %>%   # Now summarise with unique elements per group
  ungroup()

#Source: local data frame [3 x 2]
#
#  bb Unique_Elements
#1  a               2
#2  b               1
#3  c               1

사용하다filter행을 걸러내다aaNA가 있는 경우 데이터를 열별로 그룹화합니다.bb열의 고유한 요소의 수를 세어 요약합니다.aa그룹별로bb.

보시다시피 저는 파이프 조작자를 이용하고 있습니다.%>%dplyr를 사용할 때 "파이프" 또는 "체인" 명령을 함께 사용할 수 있습니다.예를 들어 코드를 왼쪽에서 쓰기까지, 위에서 아래로 깊이 중첩되지 않고(예시 코드에서와 같이) 왼쪽에서 아래로 코드를 작성하는 것이 보다 자연스러워서 쉽게 읽을 수 있는 코드를 작성할 수 있습니다.

편집:

질문의 첫 부분에서 다음과 같이 썼습니다.

저는 다음과 같은 일을 할 수 있다는 것을 알고 있습니다.

by_bb<-group_by(data, bb, add = TRUE)
summarise(by_bb, mean(aa, na.rm=TRUE), max(aa), sum(!is.na(aa)), length(aa))

이를 위한 다른 옵션이 있습니다(같은 열에 여러 함수 적용).

data %>%
 filter(!is.na(aa)) %>%
 group_by(bb) %>%
 summarise_each(list(mean = mean, max = max, sum = sum, n_distinct = n_distinct), aa)

#Source: local data frame [3 x 5]
#
#  bb mean max sum n_distinct
#1  a    2   3   4          2
#2  b    2   2   2          1
#3  c    4   4   4          1

사용.count()

가장 쉬운 방법은 다음을 사용하는 것입니다.count():

> count(data, bb)
  bb n
1  a 2
2  b 1
3  c 2

사용.summarise()

2023년부터 업데이트: dplyr와 함께, 사용하기.by =대신에group_by()기억하지 않아도 된다는 의미이므로 선호합니다.ungroup()마지막에:

> data |> summarise(length(unique(aa)), .by = bb)
  bb length(unique(aa))
1  a                  2
2  b                  1
3  c                  2

또는 파이프를 끝까지 사용하고자 하는 경우:

> data |> summarise(aa |> unique() |> length(), .by = bb)

언급URL : https://stackoverflow.com/questions/26720349/get-dplyr-count-of-distinct-in-a-readable-way

반응형