이전 포스팅에서 데이터요약 확인 방법과 기술통계량 함수에 대해 정리해두었는데요, purrr
패키지의 map
함수를 활용하여 데이터 내 모든 수량적 변수에 대해 기술통계량 한번에 보기를 해볼거에요.
뒤 길~게 적어나갈 방법으로 하지 않고 아래와 같이 짧게 설정해도 되는데요, map
함수 공부를 위해 돌아간다고 생각하고 작성하였습니다.
psych::describe(carseats, omit = TRUE) %>% # omit = TRUE : 수치적 변수가 아닌 경우 생략
dplyr::mutate(vars = colnames(purrr::keep(carseats, is.numeric)))
purrr과 dplyr 패키지모두 데이터 전처리에 유용함 함수들이 내재되어 있습니다. RStudio 웹싸이트의 패키지 Cheatsheets를 참고하시면 좋겠습니다.
purrr::keep(.x = A list or vector, .p = 함수)
purrr::map(.x = A list or vector, .p = 함수)
dplyr::mutate(.data = 데이터명, 변수 명 = 변수에 들어갈 내용)
함수 형태 | 반환값 |
---|---|
map | 리스트 |
map_ch | r 문자 벡터 |
map_dbl | 더블 (숫자형) 벡터 |
map_df | 데이터프레임 |
map_int | 정수형 벡터 |
map_lgl | 논리형 벡터 |
diamonds %>%
purrr::keep(.p = is.numeric) %>% # 숫자형 데이터만 남기기
purrr::map_df(.x = .,
.f = psych::describe) %>% # 앞의 데이터에 대해 기술통계량을 구해주는 함수 적용
dplyr::mutate(vars = colnames(purrr::keep(.x = diamonds,
.p = is.numeric))) # 기술 통계량이 어떠한 변수에 대한 것인지 추가
- mutate를 추가한 이유 ?
mutate로 vars 변수에 diamonds 내 수치형 데이터의 colnames를 넣어주었는데요, 넣지 않을 경우 아래와 같이 vars 변수는 1로만 적혀진답니다.
function(x)
을 활용하여 사용자 함수로 만들어 버리면 이후 긴 코드를 모두 작성할 필요가 없습니다. dataSummary <- function(x){ # dataSummary라는 이름으로 사용자 함수 생성
x %>%
purrr::keep(.p = is.numeric) %>%
purrr::map_df(.x = .,
.f = psych::describe) %>%
dplyr::mutate(vars = colnames(purrr::keep(.x = x,
.p = is.numeric)))
}
dataSummary(women) # R에 내장되어있는 다른 데이터로 출력해보기
이상으로 사용자함수 생성과 map
함수 사용을 연습해보았습니다. :-)
안녕하세요, 이 페이지에 있는 함수 만들기 과정이 도움이 되었습니다. 그런데 이틀 동안 도전해본 결과로는 이 페이지에 제시된 함수로는 결과가 나오지 않네요.
dataSummary <- function(x){ # dataSummary라는 이름으로 사용자 함수 생성
x %>%
purrr::keep(.p = is.numeric) %>%
purrr::map_df(.x = .,
.f = psych::describe) %>%
dplyr::mutate(vars = colnames(purrr::keep(.x = x,
.p = is.numeric)))
}
dataSummary(women)
를 이용하면, 항상 다음과 같은 에러에 맞닥뜨립니다.
Error in Math.data.frame(list(vars = c("carat", "depth", "table", "price", :
non-numeric-alike variable(s) in data frame: vars
2년이나 지난 글이라서 댓글에 대한 반응이 있을지는 모르겠네요. 수고하십쇼!