This release corrects defects in the built-in data that releases
0.7.0 to 0.8.1 of the kna project (https://github.com/kyusik-yang/kna,
CORRECTIONS.md of 2026-09-26 to 2026-09-28) found in the same Open
Assembly records, and extends the 22nd assembly to 2026-09-23 and the
asset declarations to 2025 with the kna 0.8.1 data.
data-raw/kna070_corrections.R corrects the data as of March
2026, and data-raw/refresh_kna081.R then rebuilds the 22nd
assembly and wealth. The 20th and 21st assemblies,
seminars and speeches keep their coverage.
Column names are unchanged. New columns were added, and the two columns
whose meaning changes are marked below.
bills: 64,900 rows instead of 60,925. The 22nd assembly
now has the 19,651 member bills proposed up to 2026-09-23 instead of
15,676, with their status on that date. 1,309 bills that were pending in
March 2026 have a result, and 138 bills referred or re-referred after
March 2026 have a new committee.legislators: 963 rows instead of 948. The 15 members
who took their seats between March and September 2026, 14 of them
winners of the by-elections of 2026-06-11, were added. For the 22nd
assembly party is the label of September 2026 (six members
changed party) or, for members who had left the Assembly, the last label
recorded, committees include the assignments up to
2026-09-23 and the bill counts cover the new bills.roll_calls: 549,513 rows instead of 384,022, all 1,847
recorded votes of the 22nd assembly up to 2026-09-17, from the
collection of kna 0.8.1. It includes the votes of the 16 members seated
in 2026 that the API omits, which kna took from the LIKMS vote pages.
party is the label of September 2026, which differs from
March for three members, and district now comes from
legislators, because the API of September 2026 gives
district names of 2026 (such as 전남광주통합특별시) that did not exist
at the 2024 election.votes: 8,611 rows instead of 8,050, with the 22nd
tallies up to 2026-09-17 (1,847 instead of 1,286). The earlier rows are
unchanged.wealth: 3,215 rows instead of 2,928, for 776 members.
The 287 rows of wealth year 2025 come from the March 2026 regular
disclosure (National Assembly Gazette No. 2026-54), as compiled in kna
0.8.1. The 2015-2024 rows are unchanged. year is the year
the declared wealth refers to, published in March of the following year,
and not the disclosure year as documented before.get_bill_texts() changes source. It downloads a file
hosted in this repository with the kna 0.8.1 texts of all 64,900 bills
(80 have no text), and a new column source separates the
texts scraped from the Legislative Information System, unchanged for the
bills proposed by 2026-02-27, from the texts of the Open Assembly API.
The cache file name changed.get_proposers() covers the 64,900 bills (825,283
rows).legislators$seniority now gives the seniority at that
assembly, as documented. It held the member’s lifetime number of terms
at the time of data collection, which overstated the seniority of 286
member-terms of the 20th and 21st assemblies. First-term members now
number 150 in the 20th and 168 in the 21st, equal to the official
counts, instead of 88 and 96.legislators$committees now lists the committees the
member served on in that assembly, from the dated assignment records.
The old strings came from present-day committee lists and did not match
the assembly for many members. They were empty for 233 rows, and are now
empty only for the Speaker in the 22nd assembly.legislators: six values of party_elected
now give the party whose ticket or list the member was elected on, one
20th-assembly district and two district types (two proportional members
recorded as constituency members) were corrected, the two 22nd-assembly
members who took up vacant proportional seats in June 2025 now have the
district 비례대표 instead of an empty string, and
n_bills was recounted from the complete co-sponsorship
records (582 rows change). The member who took up a vacant proportional
seat of the 22nd assembly in March 2026 was added (948 rows instead of
947).bills: the 11 vetoed bills that were rejected on the
re-vote or expired at the end of the term kept the result of their first
floor vote (passed as-is or passed with amendments). result
now follows the re-vote. New logical columns vetoed (12
bills) and alt_vetoed (180 bills incorporated into a
committee alternative that was vetoed and not passed again) make these
cases visible.roll_calls$party was documented as the party at the
time of the vote. It is the party label that the API reported at data
collection, written onto every past vote. The values are unchanged and
the documentation is corrected. The new column
party_elected gives the party at election. 53 votes cast on
2026-03-12 by the newly seated member, which the March 2026 collection
missed, were restored. The vote API omits 이소희, who took up a vacant
proportional seat on 2026-01-15, and her 230 rows of the votes up to
2026-03-12 were added from the LIKMS vote pages, as in kna 0.8.0. 171 of
them are 불참, for votes at which she was seated but on no
list (384,022 rows instead of 383,739).seminars: seniority,
total_terms, is_female,
is_proportional, is_seoul and
province now come from the member records of kna 0.7.0,
matched on member_id and assembly. They were
matched on the name alone, counted only the terms from the 17th assembly
on, and applied one seat type and one region to every term of a member.
seniority changes value in 1,128 rows, gains a value in 242
rows of the 22nd assembly and becomes NA in 272 rows. The
attributes are NA for the 266 rows without
member_id, mostly members of the outgoing assembly in
election years and legislators who share a name with another member.
province now uses the short province names and is
NA for proportional-representation members.speeches$member_id changes meaning. It held the numeric
speaker identifier of the committee minutes, which did not match
legislators$member_id for any speech. It is now the MONA_CD
for the 12,060 speeches by members of the Assembly and NA
for other speakers. The old values are kept in the new column
speaker_id. 48 speeches of 2024-08-14 that appeared twice
under two speaker identifiers were dropped (15,795 rows instead of
15,843).get_proposers() changes source. It now downloads a file
hosted in this repository and built from the kna 0.7.0 co-sponsorship
records. The old file stopped at 100 names per bill, which left out
7,447 records of 208 bills, and is_lead was
FALSE for the lead proposer of 36 single-proposer bills
(777,220 rows instead of 769,773). A new column role
separates co-proposers from supporters, who were both
is_lead == FALSE. The cache file name changed, so a file
cached by 0.1.3 is not reused.get_speech_tokens() no longer holds a second copy of
the tokens of the 48 duplicated speeches (663,582 rows instead of
665,055), and uses a new cache file name. Its documentation claimed that
56 speeches had no tokens. Every speech has tokens, and the 56 were
repeated date/speech_order keys.votes$bill_id is unique except for bill 2000491, which
has two tally rows in the source. The documentation and codebook said it
was unique.roll_calls documentation said that the API has
member-level votes for the 22nd assembly only. It also has the 20th and
21st.party_elected notes that the
source records ten successors to proportional seats (three of them in
roll_calls) under the party that the list party had merged
into, not the list party.alt_vetoed bills as passed, in all three tutorial formats.
The introduction vignette no longer says that senior legislators propose
more bills, which the data do not show. Row counts were updated in the
README, vignettes, cheatsheet, tutorials and startup message.member_id instead of
name as the individual fixed effect in its example of a
time-invariant variable, in all three tutorial formats. With the
corrected seminars attributes, two names each belong to a
man and a woman, so a name fixed effect no longer absorbed
is_female as the tutorial says.member_id, in all three tutorial formats, because two
members of the 22nd assembly are now named 박지원.get_speech_tokens(): morpheme
tokens for the speeches dataset, produced with the Kiwi
morphological analyzer (kiwipiepy). Content morphemes only
(NNG/NNP/VV/VA/MAG/SL), verbs and adjectives lemmatized, keyed by
date + speech_order. Students can do proper
Korean tokenization without installing a morphological analyzer.
Tutorial 05 gains a section comparing whitespace tokenization against
morphological analysis.etable() was called
with an lm object, which fixest::etable() does
not accept. The pooled OLS model is now re-estimated with
feols() (identical estimates) before the comparison table.
Fixed in all three tutorial formats (plain Rmd, learnr, shinyapps).slice_sample(n = min(5000, n())) errors under dplyr >=
1.1.0, which requires n to be a constant. Replaced with
slice_sample(n = 5000), which silently truncates when fewer
rows are available (same behavior).get_bill_texts() and get_proposers() now
download to a temporary file first and only move it into the cache on
success. Previously, a failed or partial download left a corrupt file
that later calls treated as a valid cache. Both functions now fail
gracefully with a message (returning NULL invisibly)
instead of an error when the resource is unavailable, and raise the
download timeout to at least 300 seconds.wealth covers 772 members
over 10 disclosure years (2015-2024), not 773 over 13 periods
(2015-2025); seminars covers the 17th-22nd assemblies
(2004-2025), not the 16th-22nd (2000-2025), and its camp
variable has five levels (including centrist); the package overview now
lists all seven built-in datasets.get_bill_texts() and
get_proposers() were re-encoded from ZSTD to GZIP
compression so that CRAN’s default arrow build (which does not include
the ZSTD codec) can read them without error.get_bill_texts() and
get_proposers() now write the cache file to
tempdir() rather than the user cache directory, so R CMD
check runs no longer leave files behind.\dontrun{} in examples per CRAN reviewer
request:
get_bill_texts(), get_proposers(): changed
to \donttest{} (download functions).open_tutorial(), run_tutorial(),
set_ko_font(): changed to
if (interactive()) {} (interactive or system-dependent
functions).legislators,
bills, wealth, seminars,
speeches, votes, roll_calls.get_bill_texts(), get_proposers().set_ko_font(),
path_to_file(), list_tutorials(),
open_tutorial(), run_tutorial().