tidyr
Verification
Scope
Pivoting, completing, filling, separating, nesting, and unnesting. Output tables compared with tidyr's.
References
- Reference
- R 4.6.1 with dplyr 1.2.1, tidyr 1.3.2
- Versions
- R 4.6.1, dplyr 1.2.1, tidyr 1.3.2, PHP 8.5.10, phibble v0.8.0 (9e63ca5)
Data
- wide.csv
- 3 rows: id, name, wk1, wk2, wk3. Source
- long.csv
- 6 rows: id, key, val, w. Source
- who.csv
- 2 rows: country, new_sp_m014, new_sp_f014, new_ep_m65. Source
- family.csv
- 3 rows: family, dob_child1, dob_child2, name_child1, name_child2. Source
- strings.csv
- 4 rows: id, s, tags, code, n. Source
- panel.csv
- 12 rows: id, g, year, value, score, label. Source
Method
Reference results computed in R by tests/r/tidyr.R and stored in tests/Fixtures/. The same operations run in phplyr in tests/TidyrTest.php, which compare every value. Values compared is the number of assertions in a case; a case fails if any assertion fails.
- Check
- Comparison with a reference implementation
- Recorded
- 2026-11-02, PHP 8.5.10, macOS (arm64), commit 65e6a46
Tolerances
|x − r| ≤ 1e-9 + 1e-9 × max(|r|, 1)
Applies to: Floating-point values
exact equality
Applies to: Column names, row counts and order, strings, integers, booleans, dates, and missing values
x: package value; r: reference value. Absolute error: |x − r|. Relative error: |x − r| / max(|r|, 1). Max errors are over the values a row compares.
Results
36 comparisons: 36 pass, 0 fail, 0 skipped.
| Case | Quantity | Criterion | Values | Max abs. error | Max rel. error | Status |
|---|---|---|---|---|---|---|
| longer | Values | exact equality | 46 | pass | ||
| longer_drop | Values | exact equality | 31 | pass | ||
| longer_sep | Values | exact equality | 31 | pass | ||
| longer_pattern | Values | exact equality | 37 | pass | ||
| longer_value | Values | exact equality | 26 | pass | ||
| wider | Table values | |x − r| ≤ 1e-9 + 1e-9 × max(|r|, 1) | 13 | 0 | 0 | pass |
| wider_fill | Table values | |x − r| ≤ 1e-9 + 1e-9 × max(|r|, 1) | 13 | 0 | 0 | pass |
| wider_fn | Table values | |x − r| ≤ 1e-9 + 1e-9 × max(|r|, 1) | 16 | 0 | 0 | pass |
| wider_multi | Table values | |x − r| ≤ 1e-9 + 1e-9 × max(|r|, 1) | 19 | 0 | 0 | pass |
| wider_sort | Table values | |x − r| ≤ 1e-9 + 1e-9 × max(|r|, 1) | 13 | 0 | 0 | pass |
| wider_glue | Table values | |x − r| ≤ 1e-9 + 1e-9 × max(|r|, 1) | 13 | 0 | 0 | pass |
| complete | Table values | |x − r| ≤ 1e-9 + 1e-9 × max(|r|, 1) | 37 | 0 | 0 | pass |
| complete_fill | Values | exact equality | 37 | pass | ||
| complete_nesting | Values | exact equality | 33 | pass | ||
| complete_grouped | Values | exact equality | 29 | pass | ||
| expand | Values | exact equality | 28 | pass | ||
| expand_nesting | Values | exact equality | 16 | pass | ||
| crossing | Values | exact equality | 13 | pass | ||
| fill_down | Values | exact equality | 19 | pass | ||
| fill_up | Values | exact equality | 19 | pass | ||
| fill_grouped | Table values | |x − r| ≤ 1e-9 + 1e-9 × max(|r|, 1) | 49 | 0 | 0 | pass |
| drop_na_all | Values | exact equality | 7 | pass | ||
| drop_na_col | Values | exact equality | 13 | pass | ||
| replace_na | Values | exact equality | 19 | pass | ||
| uncount | Values | exact equality | 19 | pass | ||
| unite | Table values | |x − r| ≤ 1e-9 + 1e-9 × max(|r|, 1) | 19 | 0 | 0 | pass |
| unite_keep | Table values | |x − r| ≤ 1e-9 + 1e-9 × max(|r|, 1) | 25 | 0 | 0 | pass |
| separate | Values | exact equality | 17 | pass | ||
| separate_merge | Values | exact equality | 17 | pass | ||
| separate_pos | Values | exact equality | 17 | pass | ||
| wider_delim | Values | exact equality | 21 | pass | ||
| wider_delim_sep | Values | exact equality | 21 | pass | ||
| wider_position | Values | exact equality | 17 | pass | ||
| wider_regex | Values | exact equality | 17 | pass | ||
| longer_delim | Values | exact equality | 22 | pass | ||
| longer_position | Values | exact equality | 34 | pass |
Reproduction
Rscript tests/r/tidyr.R
bin/site-verifications
- Raw record
- site/verifications/tidyr.json
- Input data
- tests/Fixtures