Skip to content

edfinr

0.2.0Package record

Access Tidy Education Finance Data

0packages depend
2.2Kdownloads / year
92.9%test coverage
13/13flavors OK

Overview

About

Provides easy access to tidy education finance data using Bellwether's methodology to combine NCES F-33 Survey, Census Bureau Small Area Income Poverty Estimates (SAIPE), community data from the ACS 5-Year Estimates, the Comparable Wage Index for Teachers (CWIFT) from NCES EDGE, and school district land area from U.S. Census Bureau Gazetteer Files. The package simplifies downloading, caching, and filtering education finance data by year and state, enabling researchers and analysts to explore K-12 education funding patterns, revenue sources, expenditure categories, and demographic factors across U.S. school districts.

Changes in 0.2.0
  • **FY2023 data.** Coverage now extends through the 2022-23 school year (fiscal year 2023). get_finance_data() defaults to yr = "2023" and accepts years 2012-2023 (including cpi_adj base years).
  • **list_variables() gains an f33_item column** recording the F-33 survey item(s) each F-33-sourced variable is drawn from (e.g., "F12", "TCAPOUT / V33"); NA for non-F-33 sources and edfinr-adjusted measures. The "Data Sources and Methodology" vignette's crosswalk table is built from it. Also fixes a typo in the rev_state_unadj description (TSTREV).
  • **Documentation overhaul.** The "Basic usage" vignette is now the package's "Get started" page. "Capital and Facilities" and "CWIFT" moved to pkgdown-only articles (no longer shipped in the CRAN package), joined by four new articles: "Data Quality and Comparability", "COVID Relief Spending", "Community and Economic Context", and "Mapping School Finance Data". The CRAN vignettes that download hosted data now skip evaluation on CRAN machines.
  • **Capital, debt, and fund-balance variables (F-33).** Added 17 columns: total capital outlay (exp_cap_total, exp_cap_total_pp) and its components (exp_cap_construction, exp_cap_land, exp_cap_equip_instr, exp_cap_equip_other, exp_cap_equip_nonspec), interest on debt (exp_debt_interest), long/short-term debt stocks (debt_lt_begin, debt_lt_issued, debt_lt_retired, debt_lt_end, debt_st_begin, debt_st_end), and fund balances (fund_bal_debt_svc, fund_bal_bond, fund_bal_other). exp_cap_total and exp_cap_total_pp are in the skinny dataset; the rest are full-only. See the new "Capital and Facilities" vignette.
  • **CWIFT.** Added the NCES EDGE Comparable Wage Index for Teachers: cwift_est, cwift_se, cwift_imputed, and cwift_impute_method (cwift_est and cwift_imputed are in the skinny dataset). See the new "CWIFT" vignette.
  • **District land area and student density (Census Gazetteer).** Added land_area_sq_mi and s_per_sq_mi, both in the skinny dataset for all years 2012-2023. land_area_sq_mi is NA (never Inf) where land area is zero or the LEA has no Gazetteer boundary (charters, ESAs, state-operated agencies); the Vermont FY2016-FY2021 Act 46 coverage gap leaves match rates in the 7-12% range there versus 97%+ elsewhere. Log scales are recommended when plotting s_per_sq_mi.
  • **Additional ACS and anomaly fields (skinny).** mean_hhi, gini, owner_pct, snap_pct, unemp_rate, unadjusted per-pupil revenue (rev_state_unadj_pp, rev_local_unadj_pp), raw NCES locale codes (urbanicity_raw, urbanicity_raw_cat), and the state-revenue anomaly fields osp_pct and c11_spike_flag.
  • **State capital/debt revenue exposed (skinny).** rev_state_cap_debt (F-33 item C11) is the state capital and debt-service revenue netted out of rev_state, now shipped in both datasets so the state-revenue adjustment can be reconstructed directly alongside rev_state_unadj and c11_spike_flag. Because it feeds the adjustment arithmetic, it is zero-filled -- not NA -- for non-reporting districts. Use caution comparing rev_state_pp across years for districts where c11_spike_flag is TRUE.
  • **cpi_adj scope.** Revenue, current/capital expenditure flows, exp_debt_interest, and income variables are adjusted. Debt and fund-balance **stocks** (debt_*, fund_bal_*) and the **CWIFT index** are returned nominal (never CPI-adjusted).
  • **New dictionary categories.** list_variables() now includes "debt" and "cwift" categories and lists all 124 variables (59 in the skinny dataset).
  • **Behavior change: CCD directory attributes now match the labeled fiscal year.** Previous releases joined CCD directory data one school year forward: fiscal year Y rows carried directory attributes (dist_name, county, state_leaid, cong_dist, urbanicity, urbanicity_raw, urbanicity_raw_cat, lea_type, lea_type_id) from SY Y to Y+1 instead of SY Y-1 to Y. These columns now come from the directory vintage for the same school year, so values change wherever an attribute changed between adjacent years, and FY2023 now uses the final SY 2022-23 directory rather than the SY 2023-24 vintage. The fix also restores the final operating year of districts that closed: those district-years previously had no directory match and were silently dropped by the LEA-type exclusion. Alongside it, the LEA-type screen now tolerates single-vintage agency-type miscodes (a district-year is excluded only if the following directory vintage agrees it is not a regular district, supervisory union, or charter), which keeps real districts -- e.g. all 60 MA regional districts in FY2016, several newly formed AL city districts -- from dropping out of single years.
  • **Coverage change: MA regional districts restored for FY2012-FY2015.** CCD coded every Massachusetts regional school district as a service agency (agency_type 4) for five consecutive directory vintages, SY 2011-12 through SY 2015-16, with a correction from SY 2016-17 onward. Because the miscode spans adjacent vintages, the single-vintage tolerance above only recovers FY2016; earlier releases had no data for these districts before then. This release restores them for FY2012-FY2015 via an explicit vetted list of 60 NCES LEA IDs: 236 district-years covering roughly 107,000 to 110,000 students per year (57 districts in FY2012 rising to 60 by FY2014 as three newly formed regionals phase in). Restored rows pass all other screens and show clean enrollment continuity into FY2016. Two cautions. First, lea_type and lea_type_id report what the source vintage said, so these rows (and the FY2016 rows) carry lea_type_id 4 ("Service agency"); filtering MA years 2012-2016 on lea_type_id will drop real regional districts. Second, MA regional vocational-technical districts remain excluded in every year: F-33 codes their school level 05 from FY2013 onward, outside the panel's elementary/secondary/unified scope. Row counts rise slightly in every year relative to earlier releases, and by an additional 57-60 rows in FY2012-FY2015.
Show all changes in 0.2.0Hide the rest of the changes in 0.2.0
  • **Behavior change: exp_cur_total is now sourced from TCURELSC.** In 0.1.x the total was the sum of the ESSA fund-type items (CE1 + CE2 + CE3). exp_cur_total, exp_cur_pp, and rev_exp_pp_diff are now available for nearly all districts in all years 2012-2023. Values shift slightly where both were reported (the ESSA items exclude payments to private, charter, and other school systems, so the CE-sum differs from TCURELSC by more than 2% for roughly 40% of reporting districts). The CE-based columns remain available as exp_cur_st_loc, exp_cur_fed, and exp_cur_resa, NA where states did not report them; missing values still propagate to NA rather than zero.
  • **Behavior change: flagged zero-filled missing values are now NA.** F-33 zero-fills some unreported items instead of using its -1 missing code, marking them with an FL_* = "M" data-item flag. The cleaning pipeline now applies those flags to the COVID (exp_covid_*), capital-detail, debt, fund-balance, CE fund-type, and expenditure-detail columns. Most visibly, COVID relief spending is NA -- not $0 -- for all New York districts (including NYC) in every year and for roughly a third to half of California districts from FY21 onward. Genuine reported zeros are unchanged, and column sums are unaffected (only zero-filled values became NA; the small number of cells carrying real values under a missing/not-applicable flag are retained). The revenue-adjustment inputs are deliberately excluded, so adjusted revenue coverage is unchanged; osp_pct and the exp_pay_* columns retain zero-filled values where states did not report (see the cleaning-repo README).
  • **Hosted data format.** The hosted datasets are now gzip-compressed Parquet (read with nanoparquet) instead of .rds. This is transparent to callers.
  • **Per-year downloads.** get_finance_data() now downloads only the requested year(s) -- each year is a separate hosted file of roughly 3-6 MB -- so single-year and short-range requests transfer far less than the full panel. yr = "all" still fetches the entire history from one combined file.
  • **Download robustness.** Downloads now go to a temporary file that is renamed into the session cache only on success, so an interrupted transfer can no longer leave a partial file behind that later calls treat as cached. The download timeout is temporarily raised to at least 600 seconds during transfers (R's 60-second default cannot complete the 38-54 MB yr = "all" files on slower connections); a higher user-set options(timeout = ) is respected. A cached file that fails to read is deleted with a clear message instead of failing on every subsequent call, and download failures now carry the condition class edfinr_download_error.
  • **Friendlier input handling.** geo values are whitespace-trimmed and "all" is case-insensitive, so geo = "KY, OH" and geo = "All" work; vector or NA arguments produce clear errors naming the argument instead of raw R errors; and list_variables() rejects an unknown category instead of silently returning zero rows.

From NEWS.md in the release

Install

Health

CRAN checks
13OK
Slowest check: 1.9 min · r-oldrel-windows-x86_64
Status changes
  • OK13 OK2026-08-05
  • NOTE12 OK, 1 NOTE2026-08-01
  • OK13 OK2026-07-04
  • ERROR12 OK, 1 ERROR2026-07-03
  • OK13 OK2026-05-21
Show 2 earlier changesHide 2 earlier changes
  • ERROR12 OK, 1 ERROR2026-05-20
  • OK14 OK2026-03-10
Advisories

none known

Documentation

In release 0.2.0
READMEYes · 1,513 wordsVignettesYes · 3 · evaluation depends on the environmentNEWSYes · 100% structured · mentions 0.2.0Citation fileNoWebsiteYes · pkgdown

The repository also keeps web-only articles.

Help pages
7 (4 internal)
Examples that run
100%3 run in a plain check
Exported functions with examples
100%
Documented parameters
100%
Return-value docs
100%
Help pages citing references
0%

Downloads

2.2K
CRAN downloads in the past year
Rank #18,179 · ~6/day · ~187/mo
Daily download trend is not available in this view yet.
24230 days
71890 days
2.2K1 year
Compare downloads with other packages →
Also on302 r2u1 autocran

Repository

5Stars
1Forks
0Open issues
0Open PRs
2Releases
41Commits
1Commit identities
License file reads as CC-BY-4.0 · 41 commits · Last activity 2026-08-21 · +25% stars, 30d
Responsiveness
How these are sampled
PRs merged (all time)
100%
Median days to close, 50 most recently updated closed issues
8
Median days to close, 50 most recently updated closed PRs
0

Stars over time

2026-07-14 · 42026-10-13 · 5
PracticesBeta

7 development-tooling and community-health practices detected across 4 families in the upstream repository

Checks run against github.com/bellwetherorg/edfinr on 2026-10-22.

Continuous integration (2)
GitHub ActionsR CMD check workflow

The R CMD check workflow runs on Linux, macOS and Windows, and on R-devel

Docs source (3)
pkgdown

GitHub Pages site last deployed 2026-08-21 · The repository has a site deploy workflow

pkgdown site last built 2026-08-21

CRAN release process (1)
cran-comments.md
Lint, format, editor (1)
RStudio project
How this is detected·Detection ruleset v4 (2026-10-20)
AI coding toolsBeta

This repository shows signs of AI coding tools.

  • Claude Codefirst seen 2026-07-21
    Named in .Rbuildignore: .claude
    Commits: at least 1 crediting it in the message
Models named in its commits
  • Claude Fable 51 commit · Jul 2026
Counts are commits, not lines of code. Commits by a tool's accounts count once across all of its accounts. Commits crediting it are the largest count among its credit lines, a minimum.How this is detected·Detection ruleset v4 (updated 2026-09-27)

Dependencies

Declared dependencies
12 external dependencies (excludes base and recommended)

Installing edfinr adds 16 packages (10 with compiled code, 6.3 MB of source tarballs). Heaviest: nanoparquet 1.1 MB, vctrs 1.0 MB, dplyr 902 KB.

Depends (1)
R >= 4.1.0
LinkingTo (0)
none
Enhances (0)
none
Reverse dependencies
0direct
0indirect

Nothing depends on this yet.

People & History

People (4)
Author, Maintainer since 0.1.1 (2025)
Contributor
Copyright holder
Releases (2)

Pick two releases to compare their code metrics.

  • 0.2.0Latest
    record
    2026-08-21 · current release · diff ↗
  • R
    R 4.6.0 released · 2026-04-24
  • 0.1.1
    record
    2025-08-26
  • R
    R 4.5.0 released · 2025-04-11

Package metadata

First published
2025-08-26
Total releases
2 / 1 yrs
License
CC BY 4.0
Minimum R
≥ 4.1.0
Download size
418 KB

Cite

Cite this package

Run in R for the authors' preferred citation:

citation("edfinr")
Spurrier, A., Bellwether, Chrzan, M., & Kaput, K. (2026). edfinr: Access Tidy Education Finance Data (Version 0.2.0) [Computer software]. https://doi.org/10.32614/CRAN.package.edfinr

This package has no citation file, so citation() returns this entry built from DESCRIPTION.

Cite the R Observatory

For a number measured here: a download total, a coverage figure, an archival date.

APA

Balamuta, J. J. (2026). R Observatory: Metrics for edfinr version 0.2.0 [Data set]. HJJB, LLC. Data release v2026-10-25. https://doi.org/10.5281/zenodo.21843040

From data release v2026-10-25, which the citation names so these numbers can be found later. More on citing and the projects behind them.

Report a problem with this page →

Privacy choices

These apply to this browser and are stored on this device only. Nothing about your choice is sent to us.

Read the privacy policy