R-Blogger블로그·해설한국어2023-10-17
Collapse 2.0 출시: 초고속 조인, 리쉐이핑, 향상된 R
collapse 2.0 출시 발표 collapse 2.0이 출시되었음을 알리게 되어 기쁩니다. 이번 버전에서는 빠른 조인(join), 피벗(pivot), 유연한 네임스페이스 및 신규 웹사이트, 업데이트된 치트 시트, 그리고 tidyverse 사용자들을 위한 새 비네트가 포함되었습니다. 2020년 3월 첫 번째 버전이 CRAN에 올라간 이후 3.5년 동안 10개의 주요 업데이트를 거쳐, 견고하고 안정적이며 경량화되고 빠른 통계 소프트웨어가 되었습니다. 다층, 불규칙, 가중치, 중첩, 라벨링, 결측치를 포함한 풍부한 과학 데이터를 효과적으로 다룰 수 있어, 모든 R 사용자에게 워크플로우를 향상시킬 수 있습니다. 핵심 신규 기능 빠르고 클래스-아그노스틱한 상세 조인 조인 기능은 join()으로 호출되며, how 인자를 통해 left, inner, full, right, semi, anti 조인을 지원합니다. 기본값은 left join입니다. 또한 두 가지 별도 조인 알고리즘을 제공합니다: 벡터화 해시 조인(기본, sort = FALSE)과 정렬-병합 조인(sort = TRUE). library(collapse) df1 <- data.frame(id1 = 1:4, id2 = 1:4, name = c("John", "Jane", "Bob", "Carl")) df2 <- data.frame(id1 = 1:4, id2 = 1:4, dept = c(NA, NA, NA, NA)) # left join join(df1, df2, how = "left") 예시에서는 on 인자를 비워두면 두 데이터셋에 공통된 열이 선택됩니다. overid = 2를 전달하면 경고를 끌 수 있습니다. 고급 피벗 두 번째 주요 기능은 pivot()이며, 긴(longer), 넓은(wider), 재구성(recast) 피벗을 한 API로 제공합니다. 예제 데이터로는 2014년 Groningen Growth and Development Centre 10-Sector Database를 사용합니다. # Pivot Longer pivot(GGDC10S, ids = 1:5, names = list(variable = "Sectorcode", value = "Value"), labels = "Sector", how = "longer", na.rm = TRUE) %>% head() 이렇게 하면 “Sector” 라벨이 열로 보존되며, na.rm = TRUE가 결측값을 제거합니다. 반대로 pivot(long_df, 1:5, "Value", "Sector", "Description", how = "wider") 로 되돌릴 수 있습니다. # Pivot Wider pivot(GGDC10S, ids = 1:5, names = "Variable", how = "wider", na.rm = TRUE) %>% namlab(N = TRUE, Ndistinct = TRUE) 세 번째 방법은 재구성을 통해 각 변수를 별도 열로 만들고, 섹터를 한 열에 쌓는 것입니다. # Pivot Recast recast_df <- pivot(GGDC10S, values = 6:16, names = list(from = "Variable", to = "Sectorcode"), labels = list(to = "Sector"), how = "recast", na.rm = TRUE) head(recast_df) 이렇게 하면 섹터 고정 효과가 필요한 회귀분석 등에 활용할 수 있습니다. 역피벗은 pivot(recast_df, ...) 로 수행합니다. 전역 설정 및 인터랙티브 네임스페이스 마스킹 세 번째 주요 기능은 set_collapse()를 통한 광범위한 전역 설정입니다. 결측값 처리(na.rm), 정렬 그룹화(sort), 멀티스레딩 및 알고리즘 최적화(nthreads, stable.algo), 표시 설정(stub, digits, verbose), 그리고 가장 중요한 네임스페이스 마스킹(mask, remove)을 지원합니다. 예를 들어, 기본 R과 dplyr을 사용한 코드가 느리다면, set_collapse(mask = NULL) 를 호출해 마스킹을 해제하고 collapse의 빠른 함수를 사용하도록 설정할 수 있습니다. # 예시 벤치마크 set_collapse(mask = NULL) l <- mtcars %>% group_by(cyl, vs, am) %>% summarize(mean = mean(mpg)) 마스킹은 인터랙티브하게 적용·해제할 수 있어 세션 내 언제든지 전환이 가능합니다. Fast 통계 함수와 데이터 조작 collapse는 Fast Statistical Functions와 fast Grouping 및 Ordering functions을 제공하여 apply(), lapply(), summarise() 등을 최소화합니다. 예시: # S3 generic 통계 함수 mean(mtcars) # = sapply(mtcars, mean) mean(mtcars, w = runif(32)) # = sapply(mtcars, weighted.mean, w = runif(32)) mean(mtcars, TRA = "-") |> sweep(mtcars, 2, sapply(mtcars, mean)) mtcars |> group_by(cyl, vs, am) |> mean() 결론 및 반성 collapse 2.0은 3.5년간의 여정 끝에 탄생한 성과이며, R의 속도와 통계/데이터 조작 능력을 한 단계 끌어올리는 데 기여합니다. R은 단순성과 유연성을 갖추고 있지만, 기존 구현은 반복 작업에 최적화되지 않았습니다. collapse는 알고리즘 효율성을 개선하고, 클래스-아그노스틱 벡터화를 제공함으로써 이러한 문제를 해결합니다. 저는 R을 주요 언어로 선택한 것을 결코 후회하지 않습니다. collapse는 R에 통계 복잡성, 속도, 기쁨을 부여하며, 이는 가장 포괄적인 시도라고 믿습니다. collapse 2.0이 여러분의 R 생활을 바꾸길 바랍니다. 초기 벤치마크는 트위터에서 공유되었으며, collapse는 곧 DuckDB와 같은 데이터베이스 벤치마크에도 참여할 예정입니다. fmatch()는 원자 벡터에 대해 match()보다 거의 한
원문 URL
전체 글은 원문 페이지에서 이어서 읽을 수 있습니다.
- 작성자
- R-Blogger
- 출처
- R-Blogger
- 플랫폼
- R-Blogger
- 분류
- 블로그·해설
- 언어
- 한국어
- 발행일
- 2023-10-17