반응형
썸네일
문제
r 활용하여 데이터 집계 진행하고, 엑셀로 집계 전 raw data 내려서 검증 진행했는데 두 값이 일치하지 않는다.
문제 발생 이전 과정
data_raw %>%
group_by(key) %>%
summarise(
gr1_cnt = n_distinct(cust_no[gr1_key == "O"]),
gr2_cnt = n_distinct(cust_no[gr2_key == "O"]),
gr3_cnt = n_distinct(cust_no[gr3_key == "O"])
)
# 코드결과
# key gr1_cnt gr2_cnt gr3_cnt
# 1 O 760 88 807
# 2 X 232 105 1010
data_raw에서 각 gr 기준을 만족하는 cust_no의 개수를 세고자 했다.
gr 기준이 여러개이기 때문에 filter로 일부 데이터를 날리는 것이 아닌 n_distinct 내에 조건을 추가하는 방식을 사용했다.
data_raw %>%
filter(gr1_key == "O" & key == "O") %>%
select(cust_no) %>%
distinct()
data_raw %>%
filter(gr1_key == "O" & key == "X") %>%
select(cust_no) %>%
distinct()
# 759
# 231
그런데 동일한 조건을 filter로 걸어서 해당 데이터를 확인했을 때는 숫자가 하나씩 줄어있었다.
엑셀에서 해당 raw data 활용하여 피벗테이블 실행 시 동일한 결과로 확인되었다.
그래서 n_distinct 과정 중 문제의 원인이 있을 것으로 파악하였다.
원인
data_raw$cust_no[data_raw$gr1_key == "O"]
열에 조건을 추가하여 데이터를 조회하면 위와 같이 조건에 맞는 데이터는 해당 값이 조회되고, 아닌 값은 NA로 변경된 것을 확인할 수 있다.
chk <- data_raw$cust_no[data_raw$gr1_key == "O"] %>%
as.data.frame %>%
distinct()
중복 없는 값 확인을 위해 chk를 생성해보니 값 중에 NA가 살아있었다.
이 값이 count되어 n_distinct를 쓸 때는 개수가 1개씩 늘어나 있었던 것 !!!
해결
data_raw %>%
group_by(key) %>%
summarise(
gr1_cnt = n_distinct(cust_no[gr1_key == "O"], na.rm = TRUE),
gr2_cnt = n_distinct(cust_no[gr2_key == "O"], na.rm = TRUE),
gr3_cnt = n_distinct(cust_no[gr3_key == "O"], na.rm = TRUE)
)
위와 같이 NA ignore option을 추가하면 NA 값을 포함하지 않고 n_distinct가 실행된다. (n_distinct NA ignore option)
반응형
'Data Science : Study > 5. R' 카테고리의 다른 글
R : 이중 for문으로 key 값 부여 (1) | 2024.03.12 |
---|