classDiagram
direction LR
MP_dates .. MP_names
MP_dates .. election_dates
MP_dates .. political_parties
MP_names *-- northatlantic_ft
northatlantic_votes <|-- northatlantic_ft
roll_call_results_ft <|-- northatlantic_ft
MP_names *-- northatlantic_votes_raw
northatlantic_votes_raw <|-- northatlantic_votes
roll_call_info_raw <|-- roll_call_results_ft
roll_call_info_raw ~~ ministries_lookup
ministries_lookup <|-- roll_call_results_ft
cabinets_fo .. cabinets_gl
cabinets_gl .. cabinets_dk
cabinets_dk <|-- northatlantic_ft
MP_dates *-- northatlantic_ft
class northatlantic_ft {
roll_call_id : int
MP_id : int
surname : string
origin : string
party : string
gvt_party_at_home : bool
vote_type_id : int
vote_id : int
roll_call_pass : bool
ft_process_step : string
ministry : string
ft_topic : string
ft_for : int
ft_against : int
ft_abstention : int
ft_absent : int
date : date
roll_call_type_id : int
gvt_type_dk : string
gvt_bloc_dk : string
comment : string
result_string : int
}
class northatlantic_votes {
vote_id : int
vote_type_id : int
roll_call_id : int
MP_id : int
}
class MP_dates {
period_id : string
surname : string
first_name : string
MP_id : int
origin: string
party : string
start : date
end : date
substitute : bool
}
class election_dates {
election : string
election_type : string
date : date
}
class MP_names {
surname : string
first_name : string
MP_id : int
wikidata_id : string
origin : string
party : string
substitute : bool
}
class roll_call_results_ft {
roll_call_id : int
meeting_id : int
roll_call_pass : bool
date : date
ft_topic : string
ministry : string
ft_for : int
ft_against : int
ft_abstention : int
ft_absent : int
ft_process_id : int
ft_process_step : string
roll_call_nr : int
roll_call_type_id : int
comment : string
result_string : string
}
class roll_call_info_raw {
id : int
nummer : int
konklusion : string
vedtaget : bool
kommentar : string
mødeid : int
typeid : int
sagstrinid : int
sagstrin_titel : string
sagid : int
sag_titel : string
dato : date
opdateringsdato : date
}
class ministries_lookup {
sagid : int
ministerium : string
opdateringsdato : date
}
class northatlantic_votes_raw {
id : int
typeid : int
afstemningid : int
aktørid : int
opdateringsdato : date
}
class political_parties {
party : string
full_name : string
wikidata_id : string
party_family : string
colour : string
origin : string
left_right : float
state_market : float
liberty_authority : float
anti_pro_eu : float
}
class cabinets_fo {
cabinet : string
wikidata_id : string
location : string
start : date
end : date
FO_* : bool
}
class cabinets_gl {
cabinet : string
wikidata_id : string
location : string
start : date
end : date
GL_* : bool
}
class cabinets_dk {
cabinet : string
wikidata_id : string
bloc : string
type : string
start : date
end : date
DK_* : bool
}
style roll_call_info_raw fill:#6195CF,color:#FFFFFF
style roll_call_results_ft fill:#6195CF,color:#FFFFFF
style ministries_lookup fill:#9bc0e8
style northatlantic_ft fill:#F7CB45
style northatlantic_votes_raw fill:#FFEAAE
style northatlantic_votes fill:#FFEAAE
style MP_names fill:#D1BBD7
style MP_dates fill:#D1BBD7
click MP_dates href "#mp_dates" "tooltip"
click election_dates href "#election_dates" "tooltip"
click political_parties href "#political_parties" "tooltip"
click MP_names href "#MP_names" "tooltip"
click northatlantic_votes_raw href "#northatlantic_votes_raw" "tooltip"
click northatlantic_votes href "#northatlantic_votes" "tooltip"
click ministries_lookup href "#ministries_lookup" "tooltip"
click roll_call_info_raw href "#roll_call_info_raw" "tooltip"
click roll_call_results_ft href "#roll_call_results_ft" "tooltip"
click cabinets_fo href "#cabinets_fo" "tooltip"
click cabinets_gl href "#cabinets_gl" "tooltip"
click cabinets_dk href "#cabinets_dk" "tooltip"
click northatlantic_ft href "#northatlantic_ft" "tooltip"
Codebook
Introduction
This codebook provides descriptions of the nordatlantisk-ft data set, i.e. of all files in /data/. Variables are described for each file individually with information on connections to other variables within the pipeline to create the data set. All data, unless otherwise specified, is retrieved from the records of the parliament of Denmark, Folketinget (2026). Refer to Berntzen et al. (2019) for background information on Folketinget’s open data ecosystem.
All data is available in rds format that can be read in an R Session via readRDS(). Where data is also available in csv format, tabular metadata is provided in json files according to the W3C Metadata Vocabulary for Tabular Data (W3C 2015).
File and Variable Descriptions
The general structure of the data used in the workflow to compile the final northatlantisk_ft.csv output is illustrated in Figure 1. Click on an element to jump to its description in the codebook.
MP_names
This repository is shipped with a list of all Folketinget MPs that have represented the Faroe Islands and Greenland from October 07, 2004 until the most recent update of this data set (on February 15, 2026), which results in 30 MPs.
MP_names is provided in csv and rds formats in /data/processed. Metadata for the csv file is provided in an accompanying json metadata file. These files are compiled by executing the script at src/create_MP_list.R and other MPs should be added by updating this script.
The rds file serves as starting point for building the data set, as the workflow pipeline1 retrieves data from Folketinget’s Open Data Portal based on which MPs are listed in this file.
str(MP_names)'data.frame': 30 obs. of 7 variables:
$ surname : chr "Olsvig" "Lund Olsen" "Jakobsen" "Johansen" ...
$ first_name : chr "Sara" "Johan" "Doris" "Lars-Emil" ...
$ MP_id : Factor w/ 30 levels "12283","13","14000",..: 2 21 22 27 28 4 26 3 5 6 ...
$ wikidata_id: Factor w/ 30 levels "Q102501785","Q114967087",..: 28 24 4 18 13 30 20 7 11 10 ...
$ origin : Factor w/ 2 levels "FO","GL": 2 2 2 2 2 2 2 2 2 2 ...
$ party : Factor w/ 9 levels "A","B","C","E",..: 5 5 7 7 5 5 5 7 5 9 ...
$ substitute : logi FALSE TRUE FALSE FALSE FALSE TRUE ...
Descriptions of all variables in MP_names are provided in the following sections.
MP_names$surname
All surname(s) are stored as values of the type character. Names are spelled according to standardised orthography and, in terms of morphology, in nominative (Faroese) resp. absolutive (Greenlandic) case. Because there are be multiple MPs with the same surname(s), refer to MP_names$MP_id instead for reliable identification.
head(MP_names$surname)[1] "Olsvig" "Lund Olsen" "Jakobsen" "Johansen" "Kleist"
[6] "Rossen"
MP_names$first_name
All first names are stored as values of the type character. Names are spelled according to standardised orthography and, morphologically, in nominative (Faroese) resp. absolutive (Greenlandic) case. Because there may be multiple MPs with the same first name(s), refer to MP_names$MP_id instead for reliable identification.
head(MP_names$first_name)[1] "Sara" "Johan" "Doris" "Lars-Emil" "Kuupik" "Sofia"
MP_names$MP_id
Each MP is assigned an ID by Folketingets åbne data service (ODA). Each MP_id thus is a unique identifier for one member of Folketinget. All IDs are stored as values of the type integer as factor variable. It is possible to use these IDs e.g. for querying the online database to retrieve documents that relate to a given MP or to find out which parliamentary processes this MP has been engaged in. The Folketing ID is also available as Wikidata Property P10207.
head(MP_names$MP_id)[1] 13 277 294 670 672 1484
30 Levels: 12283 13 14000 1484 15757 15758 15881 17988 1833 18545 ... 9780
This variable corresponds to the aktørid variable and the Aktør resource in the Folketing online database. Note that in Folketinget’s data model, ministries, parliamentary commissions, NGOs etc. are also listed as Aktør with their resp. aktørid.
MP_names$wikidata_id
Apart from MP_names$MP_id, each MP’s Wikidata QID is stored in MP_names for further processing options. This identifier can be used to query Wikidata to supplement the dataset with further information. At the moment, this identifier is not used in any step of the processing pipeline.
head(MP_names$wikidata_id)[1] Q8084240 Q5965473 Q12308847 Q468034 Q317400 Q86523542
30 Levels: Q102501785 Q114967087 Q122762872 Q12308847 Q136486981 ... Q86523542
MP_names$origin
Using ISO 3166-2 codes, origin indicates whether an MP was elected in either Greenland (GL) or the Faroe Islands (FO). This variable is stored as value of the type integer as factor variable. Note that this only indicates where the MP in question ran for office. MPs with ties to Greenland or the Faroe Islands who won a Folketinget mandate in a continental election district are thus not part of this data set, as they are not considered Northatlantic MPs.
summary(MP_names$origin)FO GL
17 13
MP_names$party
The political party that each MP belongs to is stored as value of the type integer as factor variable.
Since 2004, MPs from the Faroe Islands were members of 4 different political parties. Voters in Greenland elected politicians from 2 different political parties. However, as per February 2026, there have been two MPs from Greenland who left their party – Siumut, in both cases – during their time in office and joined other parties (Nunatta Qitornai and Naleraq2).
For now, the MP_names data frame does not include information on membership periods etc. At the moment, these two cases are therefore stored with a single string without distinguishing between membership periods. Instead, a timeline of party membership(s) can be inferred using the information available in MP_dates. See also political_parties.
summary(MP_names$party) A B C E IA N SIU SIU, N SIU, NQ
1 6 6 4 6 1 4 1 1
All represented political parties are listed in Table 1 with additional information (where available) on their positions from the ParlGov dataset (Döring, Huber, and Manow 2024).
| Party | Full Name | Party Family | Left–Right | State–Market | Liberty–Authority | Anti–Pro-EU |
|---|---|---|---|---|---|---|
| IA | Inuit Ataqatigiit | Communist/Socialist | 1.3 | 1.4 | 3.0 | 3.3 |
| N | Naleraq | NA | NA | NA | NA | NA |
| NQ | Nunatta Qitornai | NA | NA | NA | NA | NA |
| SIU | Siumut | Social Democracy | 3.3 | 3.5 | 3.5 | 8.1 |
| Party | Full Name | Party Family | Left–Right | State–Market | Liberty–Authority | Anti–Pro-EU |
|---|---|---|---|---|---|---|
| A | Fólkaflokkurin | Conservative | 7.4 | 6.4 | 6.9 | 7.9 |
| B | Sambandsflokkurin | Conservative | 7.4 | 6.4 | 6.9 | 7.9 |
| C | Javnaðarflokkurin | Social Democracy | 3.3 | 3.5 | 3.5 | 8.1 |
| E | Tjóðveldi | Communist/Socialist | 1.3 | 1.4 | 3.0 | 3.3 |
MP_names$substitute
Some of the politicians that are part of this data set joined Folketinget in the role of a substitute member, filling in for the originally elected MPs while they were on leave (cf. Harder 2022, 12–13). Doris Jakobsen (SIU), Lisbeth Petersen (B), Magni Arge (E) and Sjúrður Skaale (C) all first became MPs as substitute members, but later joined as regular MPs after a general election. For now, they are listed as full members in MP_names. More detailed data on membership periods is available in MP_dates.
summary(MP_names$substitute) Mode FALSE TRUE
logical 15 15
MP_dates
The dataset includes detailed information on membership timelines of MPs in Folketinget. Because a substantial share of MPs from Greenland and the Faroe Islands were absent for a longer period (Harder 2022, 12–13), there have been a number of substitute MPs (stedfortrædere) replacing the originally elected politicians during their time(s) of absence. Those MPs are listed here as well. As of February 15, 2026, MP_dates includes 71 observations of 9 variables.
MP_dates is provided in csv and rds formats in /data/processed. Metadata for the csv file is provided in an accompanying json metadata file. These files are compiled by executing the script at src/create_MP_dates.R and other MPs should be added by updating this script.
str(MP_dates)'data.frame': 71 obs. of 9 variables:
$ period_id : Factor w/ 71 levels "a-fridriksmork_1",..: 53 54 55 56 57 46 47 48 49 29 ...
$ surname : chr "Olsvig" "Olsvig" "Olsvig" "Olsvig" ...
$ first_name: chr "Sara" "Sara" "Sara" "Sara" ...
$ MP_id : Factor w/ 30 levels "12283","13","14000",..: 2 2 2 2 2 21 21 21 21 22 ...
$ origin : Factor w/ 2 levels "FO","GL": 2 2 2 2 2 2 2 2 2 2 ...
$ party : Factor w/ 9 levels "A","B","C","E",..: 5 5 5 5 5 5 5 5 5 8 ...
$ start : Date, format: "2011-09-15" "2013-09-14" ...
$ end : Date, format: "2013-09-08" "2013-10-01" ...
$ substitute: logi FALSE FALSE FALSE FALSE FALSE TRUE ...
Descriptions of all variables in MP_dates are provided in the following sections.
MP_dates$period_id
Each recorded membership period can be reliably identified by using the period_id variable, allowing to distinguish between multiple membership periods of the same politician(s). Period IDs are stored as factor variables.
str(MP_dates$period_id) Factor w/ 71 levels "a-fridriksmork_1",..: 53 54 55 56 57 46 47 48 49 29 ...
MP_dates$surname
All surname(s) are stored as values of the type character. Names are spelled according to standardised orthography and, in terms of morphology, in nominative (Faroese) resp. absolutive (Greenlandic) case. Because there are be multiple MPs with the same surname(s), refer to MP_dates$MP_id instead for reliable identification of each MP and to MP_dates$period_id for reliable identification of membership periods. See also MP_names$surname.
str(MP_dates$surname) chr [1:71] "Olsvig" "Olsvig" "Olsvig" "Olsvig" "Olsvig" "Lund Olsen" ...
MP_dates$first_name
All first names are stored as values of the type character. Names are spelled according to standardised orthography and, morphologically, in nominative (Faroese) resp. absolutive (Greenlandic) case. Because there may be multiple MPs with the same first name(s), refer to MP_dates$MP_id instead for reliable identification. See also MP_names$first_name.
str(MP_dates$first_name) chr [1:71] "Sara" "Sara" "Sara" "Sara" "Sara" "Johan" "Johan" "Johan" ...
MP_dates$MP_id
Each MP is assigned an ID by Folketingets åbne data service (ODA). Each MP_id thus is a unique identifier for one member of Folketinget. All IDs are stored as values of the type integer as factor variable. It is possible to use these IDs e.g. for querying the online database to retrieve documents that relate to a given MP or to find out which parliamentary processes this MP has been engaged in. The Folketing ID is also available as Wikidata Property P10207. See also MP_names$MP_id.
str(MP_dates$MP_id) Factor w/ 30 levels "12283","13","14000",..: 2 2 2 2 2 21 21 21 21 22 ...
MP_dates$origin
Using ISO 3166-2 codes, origin indicates whether an MP was elected in either Greenland (GL) or the Faroe Islands (FO). This variable is stored as value of the type integer as factor variable. Note that this only indicates where the MP in question ran for office. MPs with ties to Greenland or the Faroe Islands who won a Folketinget mandate in a continental election district are thus not part of this data set, as they are not considered Northatlantic MPs.
summary(MP_dates$origin)FO GL
39 32
MP_dates$party
The political party that each MP belongs to is stored as value of the type integer as factor variable. See MP_names$party and political_parties for more information. In contrast to those, MP_dates$party actually provides information on changing party membership(s) since membership entries are split up on a timeline. This way, it’s possible to match each recorded vote to the valid party membership at a specific point in time.
Note that the value UF means that the MP is not a member of a political group/party at the time (uden for folketingsgrupperne).
unique(MP_dates$party)[1] IA SIU UF NQ N B E C A
Levels: A B C E IA N NQ SIU UF
MP_dates$start
The date on which each membership period begins is stored as Date variable of the type double. Calendar information is formatted as %Y-%m-%d, the earliest entry being from October 06, 1988 (1988-10-06) and the most recent entry from November 14, 2025 (2025-11-14) as of February 2026.
In this data set, a membership period is either starting when a politicians joins Folketinget for the first time, if the MP in question is re-joining after being replaced by a temporary substitute member or if there is a change in party affiliation.
head(MP_dates$start)[1] "2011-09-15" "2013-09-14" "2013-11-19" "2014-04-25" "2015-05-27"
[6] "2013-09-08"
MP_dates$end
The date on which each membership period ends is stored as Date variable of the type double. Calendar information is formatted as %Y-%m-%d, the earliest entry being from October 19, 1988 (1988-10-19) as of February 2026.
In this data set, a membership period ends either when a politicians leaves Folketinget for good, if the MP in question is temporarily being replaced by a temporary substitute member or if there is a change in party affiliation.
head(MP_dates$end)[1] "2013-09-08" "2013-10-01" "2014-03-21" "2014-09-15" "2015-06-18"
[6] "2013-09-14"
MP_dates$substitute
Some of the politicians that are part of this data set joined Folketinget in the role of a substitute member, filling in for the originally elected MPs while they were on leave (cf. Harder 2022, 12–13). Doris Jakobsen (SIU), Lisbeth Petersen (B), Magni Arge (E) and Sjúrður Skaale (C) all first became MPs as substitute members, but later joined as regular MPs after a general election. In contrast to the data in MP_names$substitute, the data available in MP_dates$substitute also distinguishes between MPs that first joined as substitute MPs but became regular MPs at a later date.
As per February 15, 2026, 19 of the politicians that are part of this data set joined Folketinget in the role of a substitute member, filling in for one of the originally elected MPs while they were on leave (cf. Harder 2022, 12–13).
summary(MP_dates$substitute) Mode FALSE TRUE
logical 44 27
election_dates
This repository is shipped with a list of all elections to the parliaments in Denmark (Folketinget), Greenland (Inatsisartut) and the Faroe Islands (Løgtingið) that led to the formation of the parliaments in session during the time period covered by this data set. This translates to 7 elections to Folketing, 8 elections to Inatsisartut, and 6 elections to Løgting. The earliest election included is the one held on November 20, 2001, while the most recent election included was held on March 11, 2025.
The contents of election_dates is not used during the workflow to compile the final northatlantik_ft data set, but is used as secondary data for visualisation purposes.
election_dates is provided in csv and rds formats in /data/processed. Metadata for the csv file is provided in an accompanying json metadata file. These files are compiled by executing the script at src/create_election_list.R and following elections should be added by updating this script.
str(election_dates)'data.frame': 21 obs. of 3 variables:
$ election : chr "ft_2001" "ft_2005" "ft_2007" "ft_2011" ...
$ election_type: Factor w/ 3 levels "Folketing Election",..: 1 1 1 1 1 1 1 2 2 2 ...
$ date : Date, format: "2001-11-20" "2005-02-08" ...
Descriptions of all variables in election_dates are provided in the following sections.
election_dates$election
The election variable is the unique identifier for each recorded election in this dataset. All entries are stored as values of the type character as character variable.
head(election_dates$election)[1] "ft_2001" "ft_2005" "ft_2007" "ft_2011" "ft_2015" "ft_2019"
election_dates$election_type
The election_dates dataset includes elections to three different parliaments: Danish Folketinget, Greenlandic Inatsisartut and Faroese Løgtingið. To distinguish between elections, the type of election is stored in election_dates$election_type. All entries are stored as values of the type integer as factor variable.
summary(election_dates$election_type) Folketing Election Inatsisartut Election Løgting Election
7 8 6
election_dates$date
The date of each election is stored in election_dates$date, indicating the day of voting. All entries are stored as values of the type double as Date variable. The dates are formatted using the %Y-%m-%d notation.
Note that the 2022 Folketing election which took place in Denmark and Greenland on November 01, 2022 was held earlier on the Faroe Islands – it was moved up to October 31, 2022 due to a Faroese public holiday (Statsministeriet 2022).
str(election_dates$date) Date[1:21], format: "2001-11-20" "2005-02-08" "2007-11-13" "2011-09-15" "2015-06-18" ...
political_parties
This repository is shipped with a list of political parties that have been represented in Folketinget during the time period covered by this data set. This list was most recently updated on February 15, 2026 and includes 8 political parties. From these parties, 4 are from Greenland and 4 from the Faroe Islands.
The contents of election_dates is not used during the workflow to compile the final northatlantik_ft data set, but is used as secondary data for visualisation purposes.
political_parties is provided is provided in csv and rds formats in /data/processed. Metadata for the csv file is provided in an accompanying json metadata file.
str(political_parties)'data.frame': 8 obs. of 10 variables:
$ party : Factor w/ 8 levels "A","B","C","E",..: 5 6 7 8 1 2 3 4
$ full_name : chr "Inuit Ataqatigiit" "Naleraq" "Nunatta Qitornai" "Siumut" ...
$ wikidata_id : Factor w/ 8 levels "Q1128374","Q16856492",..: 1 2 3 4 7 8 6 5
$ party_family : Factor w/ 3 levels "Communist/Socialist",..: 1 NA NA 3 2 2 3 1
$ colour : chr "#AB2328" "#FF6900" "#A1359B" "#0385FF" ...
$ origin : Factor w/ 2 levels "FO","GL": 2 2 2 2 1 1 1 1
$ left_right : num 1.3 NA NA 3.3 7.4 7.4 3.3 1.3
$ state_market : num 1.4 NA NA 3.5 6.4 6.4 3.5 1.4
$ liberty_authority: num 3 NA NA 3.5 6.9 6.9 3.5 3
$ anti_pro_eu : num 3.3 NA NA 8.1 7.9 7.9 8.1 3.3
Descriptions of all variables in political_parties are provided in the following sections.
political_parties$party
The party variable of political_parties stores the common abbreviation for each party. All entries are stored as values of the type integer as factor variable.
Note that while political parties in Greenland are abbreviated using letters actually corresponding to their official names, this is not the case for parties in Denmark and and the Faroe Islands. Here, parties are often referred to by their one-letter reference code (Bogstavsbetegnelser). This code does not necessarily correspond to any part of the party’s official name, but is simply a commonly used shorthand for the party. For example, the Faroese Social Democratic Party (Javnaðarflokkurin) is commonly labelled as C, even though the letter does not appear anywhere in the party’s name.
head(political_parties$party)[1] IA N NQ SIU A B
Levels: A B C E IA N NQ SIU
political_parties$full_name
The full_name variable of political_parties stores the full name for each party. Names are spelled according to standardised orthography and, in terms of morphology, in nominative (Faroese) resp. absolutive (Greenlandic) case. All entries are stored as values of the type character as character variable.
str(political_parties$full_name) chr [1:8] "Inuit Ataqatigiit" "Naleraq" "Nunatta Qitornai" "Siumut" ...
political_parties$wikidata_id
The wikidata_id variable stores the QID linking to the Wikidata entity representing the political party in question, making it easy to retrieve additional information from Wikidata, if necessary. This variable is stored as value of the type integer as factor variable.
head(political_parties$wikidata_id)[1] Q1128374 Q16856492 Q50802925 Q571175 Q932342 Q932400
8 Levels: Q1128374 Q16856492 Q50802925 Q571175 Q750962 Q856027 ... Q932400
political_parties$party_family
The party_family variable of political_parties stores the label for the political party family the party is matched with in the ParlGov dataset (Döring, Huber, and Manow 2024). All entries are stored as values of the type integer as factor variable.
Note that party families are not listed for parties that have MPs in Folketinget for the first time after the last update of the ParlGov dataset (Naleraq, Nunatta Qitornai).
head(political_parties$party_family)[1] Communist/Socialist <NA> <NA>
[4] Social Democracy Conservative Conservative
Levels: Communist/Socialist Conservative Social Democracy
political_parties$colour
The colour variable of political_parties stores HEX codes corresponding to the colour usually associated with the party. All entries are stored as values of the type character as character variable. The codes are retrieved from each party’s Wikipedia article.
head(political_parties$colour)[1] "#AB2328" "#FF6900" "#A1359B" "#0385FF" "#347235" "#00008B"
political_parties$origin
Using ISO 3166-2 codes, origin indicates whether a party stands for election in either Greenland (GL) or the Faroe Islands (FO). This variable is stored as value of the type integer as factor variable. As per February 2026, political_parties lists 4 Greenlandic and 4 Faroese parties.
summary(political_parties$origin)FO GL
4 4
political_parties$left_right
left_right indicates where a party’s positions are located on a scale from 0 (left) to 10 (right). Values are taken directly from the ParlGov dataset (Döring, Huber, and Manow 2024). This variable is stored as value of the type double as numeric variable.
Note that party positions are not listed for parties that have MPs in Folketinget for the first time after the last update of the ParlGov dataset (Naleraq, Nunatta Qitornai).
head(political_parties$left_right)[1] 1.3 NA NA 3.3 7.4 7.4
political_parties$state_market
state_market indicates where a party’s positions on regulating the economy are located on a scale from 0 (preferring state regulations) to 10 (preferring unregulated markets). Values are taken directly from the ParlGov dataset (Döring, Huber, and Manow 2024). This variable is stored as value of the type double as numeric variable.
Note that party positions are not listed for parties that have MPs in Folketinget for the first time after the last update of the ParlGov dataset (Naleraq, Nunatta Qitornai).
head(political_parties$state_market)[1] 1.4 NA NA 3.5 6.4 6.4
political_parties$anti_pro_eu
anti_pro_eu indicates a party’s position towards EU integration on a scale from 0 (in favor of EU integration) to 10 (against EU integration). Values are taken directly from the ParlGov dataset (Döring, Huber, and Manow 2024). This variable is stored as value of the type double as numeric variable.
Note that party positions are not listed for parties that have MPs in Folketinget for the first time after the last update of the ParlGov dataset (Naleraq, Nunatta Qitornai).
head(political_parties$anti_pro_eu)[1] 3.3 NA NA 8.1 7.9 7.9
northatlantic_votes
After all votes cast by the MPs specified in MP_names are downloaded, they are processed and then stored in this file. As per February 2026, northatlantic_votes.rds contains 41038 observations of 4 variables.
northatlantic_votes is provided as rds file in /data/processed/. The unprocessed raw data is available as rds file in /data/raw/.
str(northatlantic_votes)'data.frame': 41038 obs. of 4 variables:
$ vote_id : Factor w/ 41038 levels "154","158","161",..: 1 2 3 4 5 6 7 8 9 10 ...
$ vote_type_id: Factor w/ 4 levels "1","2","3","4": 3 3 3 3 3 3 3 3 3 3 ...
$ roll_call_id: int 1 1 1 1 2 2 2 2 283 283 ...
$ MP_id : Factor w/ 29 levels "13","247","262",..: 2 3 5 1 2 3 5 1 2 3 ...
Descriptions of all variables in northatlantic_votes are provided in the following sections.
northatlantic_votes$vote_id
All votes cast in Folketinget are assigned an ID by Folketingets åbne data service (ODA). Each vote ID is thus a unique identifier for one vote cast in Folketinget. All IDs are stored as values of the type integer as factor variable.
This variable corresponds to the id variable and the Stemme resource in the Folketing online database.
head(northatlantic_votes$vote_id)[1] 154 158 161 177 332 338
41038 Levels: 154 158 161 177 332 338 341 356 113800 113808 113812 ... 2357426
northatlantic_votes$vote_type_id
All votes cast in Folketinget are recorded using numeric values that correspond to the MP’s decision (see Table 2). All Vote Type IDs are stored as values of the type integer as factor variable.
| ID | Result | English | n |
|---|---|---|---|
| 1 | for | for | 355 |
| 2 | imod | against | 326 |
| 3 | fravær | absence | 40224 |
| 4 | hverken for eller imod | abstention | 133 |
This variable corresponds to the typeid variable and the Stemmetype resource in the Folketing online database.
head(northatlantic_votes$vote_type_id)[1] 3 3 3 3 3 3
Levels: 1 2 3 4
northatlantic_votes$roll_call_id
All roll call procedures in Folketinget are assigned an ID by Folketingets åbne data service (ODA). Each roll call ID is thus a unique identifier for one roll call in Folketinget. All IDs are stored as values of the type integer as integer variable.
This variable corresponds to the roll_call_results_ft$roll_call_id variable and the Afstemning resource in the Folketing online database. Take care not to confuse roll_call_id with roll_call_results_ft$roll_call_nr.
head(northatlantic_votes$roll_call_id)[1] 1 1 1 1 2 2
northatlantic_votes$MP_id
See MP_names$MP_id.
head(northatlantic_votes$MP_id)[1] 247 262 294 13 247 262
29 Levels: 13 247 262 277 294 670 672 918 1484 1833 3093 6684 6687 ... 21206
northatlantic_votes_raw
northatlantic_votes_raw contains the downloaded data on voting records before any preprocessing. As of February 2026, northatlantic_votes_raw.rds contains 41038 observations of 5 variables.
northatlantic_votes_raw is provided as rds file in /data/raw/. The processed data is available as rds file in /data/processed.
str(northatlantic_votes_raw)'data.frame': 41038 obs. of 5 variables:
$ id : int 154 158 161 177 332 338 341 356 113800 113808 ...
$ typeid : int 3 3 3 3 3 3 3 3 3 3 ...
$ afstemningid : int 1 1 1 1 2 2 2 2 283 283 ...
$ aktørid : int 247 262 294 13 247 262 294 13 247 262 ...
$ opdateringsdato: POSIXct, format: "2014-09-09 09:05:59" "2014-09-09 09:05:59" ...
Descriptions of all variables in northatlantic_votes_raw are provided in the following sections.
northatlantic_votes_raw$id
See northatlantic_votes$vote_id. In the raw data, id is stored as integer value.
head(northatlantic_votes_raw$id)[1] 154 158 161 177 332 338
northatlantic_votes_raw$typeid
See northatlantic_votes$vote_type_id. In the raw data, typeid is stored as integer value.
unique(northatlantic_votes_raw$typeid)[1] 3 1 4 2
northatlantic_votes_raw$afstemningid
See northatlantic_votes$roll_call_id. In the raw data, afstemningid is stored as integer value.
Take care not to confuse afstemningid with roll_call_results_ft$roll_call_nr.
head(northatlantic_votes_raw$afstemningid)[1] 1 1 1 1 2 2
northatlantic_votes_raw$aktørid
See northatlantic_votes$MP_id. In the raw data, aktørid is stored as integer value.
head(northatlantic_votes_raw$aktørid)[1] 247 262 294 13 247 262
northatlantic_votes_raw$opdateringsdato
For all records kept in the Folketing online database, the time stamp of its most recent update is stored in opdateringsdato. All dates are stored as values of the type double. The time stamps are originally formatted as %Y-%m-%dT%T, with some values even at split second level, but simplified to %Y-%m-%d after downloading.
This variable is eliminated from northatlantic_votes as a result of data processing but used to check for updates in the raw data on voting records when running the workflow pipeline.
head(northatlantic_votes_raw$opdateringsdato)[1] "2014-09-09 09:05:59 UTC" "2014-09-09 09:05:59 UTC"
[3] "2014-09-09 09:05:59 UTC" "2014-09-09 09:05:59 UTC"
[5] "2014-09-09 09:25:05 UTC" "2014-09-09 09:25:05 UTC"
roll_call_results_ft
After all roll calls are downloaded, they are processed and then stored in this file. As of February 2026, roll_call_results_ft.rds contains 10478 observations of 16 variables.
roll_call_results_ft is provided as rds file in /data/processed/. The unprocessed raw data is available as rds file in /data/raw/.
str(roll_call_results_ft)'data.frame': 10478 obs. of 16 variables:
$ roll_call_id : int 1 2 3 4 5 6 7 8 9 10 ...
$ meeting_id : int 17 18 41 156 18 15 962 962 962 962 ...
$ roll_call_pass : logi TRUE TRUE TRUE TRUE TRUE TRUE ...
$ date : Date, format: "2014-09-09" "2014-09-09" ...
$ ft_topic : chr NA "Forslag til lov om ændring af virksomhedsskatteloven og kildeskatteloven. (Indgreb mod utilsigtet udnyttelse af"| __truncated__ "Folketinget konstaterer, at Danmark stod dårligt rustet til at stå imod den økonomiske krise og derfor mistede "| __truncated__ "Forslag til lov om akutjob og jobpræmie til arbejdsgivere." ...
$ ministry : chr NA "Skatteministeriet" NA "Beskæftigelsesministeriet" ...
$ ft_for : num 108 98 59 72 98 104 4 16 59 70 ...
$ ft_against : num 0 10 54 10 10 0 57 77 33 33 ...
$ ft_abstention : num 0 0 0 26 0 0 45 13 13 5 ...
$ ft_absent : num 71 71 66 71 71 75 73 73 74 71 ...
$ ft_process_id : int NA 4849 17351 18370 4849 16581 3311 3220 4856 2500 ...
$ ft_process_step : chr NA "3. behandling" "Behandling" "3. behandling" ...
$ roll_call_nr : int 411 412 1 7 412 410 408 407 404 405 ...
$ roll_call_type_id: int 2 1 3 1 1 1 1 1 1 1 ...
$ comment : chr NA NA NA NA ...
$ result_string : chr "Vedtaget\n\n108 stemmer for forslaget (V, S, DF, RV, SF, EL, LA, KF, UFG)\n\n0 stemmer imod forslaget\n\n0 stem"| __truncated__ "Vedtaget\n\n98 stemmer for forslaget (V, S, DF, RV, SF, EL)\n\n10 stemmer imod forslaget (LA, KF)\n\n0 stemmer "| __truncated__ "Vedtaget\n\n59 stemmer for forslaget (S, RV, SF, EL)\n\n54 stemmer imod forslaget (V, DF, LA, KF)\n\n0 stemmer "| __truncated__ "Vedtaget\n\n72 stemmer for forslaget (S, DF, RV, SF, EL)\n\n10 stemmer imod forslaget (LA, KF)\n\n26 stemmer hv"| __truncated__ ...
Descriptions of all variables in roll_call_results_ft are provided in the following sections.
roll_call_results_ft$roll_call_id
See northatlantic_votes$roll_call_id. Take care not to confuse roll_call_id with roll_call_nr.
head(roll_call_results_ft$roll_call_id)[1] 1 2 3 4 5 6
roll_call_results_ft$meeting_id
All meetings in Folketinget are assigned an ID by Folketingets åbne data service (ODA). Each meeting ID is thus a unique identifier for one meeting in Folketinget. All IDs are stored as values of the type integer as integer variable.
This variable corresponds to the mødeid variable and the Møde resource in the Folketing online database.
head(roll_call_results_ft$meeting_id)[1] 17 18 41 156 18 15
roll_call_results_ft$roll_call_pass
The result of all roll calls in Folketinget is stored in roll_call_pass as logical variable. If parliament votes in favor of a proposal, it passes and roll_call_pass is assigned TRUE; if parliament votes a proposal down, it does not pass and roll_call_pass is assigned FALSE.
This variable corresponds to the vedtaget variable in the Afstemning resource in the Folketing online database.
summary(roll_call_results_ft$roll_call_pass) Mode FALSE TRUE
logical 4840 5638
roll_call_results_ft$date
The date on which each roll call takes place in Folketinget is stored as Date variable of the type double. Calendar information is formatted as %Y-%m-%d, the earliest entry being from October 07, 2004 (2004-10-07) and the most recent entry from February 05, 2026 (2026-02-05) as of February 2026.
head(roll_call_results_ft$date)[1] "2014-09-09" "2014-09-09" "2012-10-04" "2012-11-06" "2014-09-09"
[6] "2014-08-27"
roll_call_results_ft$ft_topic
Each proposal that is being voted on in Folketinget has a description of the topic(s) that are mentioned in the proposal. This description is stored in ft_topic. Topic descriptions are stored as values of the type character.
This variable corresponds to the titel variable in the Sag resource in the Folketing online database (which additionally provides a shorter version with less formalised language in the titelkort variable).
head(roll_call_results_ft$ft_topic)[1] NA
[2] "Forslag til lov om ændring af virksomhedsskatteloven og kildeskatteloven. (Indgreb mod utilsigtet udnyttelse af virksomhedsordningen ved indskud af privat gæld m.v.)."
[3] "Folketinget konstaterer, at Danmark stod dårligt rustet til at stå imod den økonomiske krise og derfor mistede uforholdsmæssigt mange arbejdspladser. Den økonomiske krise har fortsat et alvorligt tag i Danmark.\n\nI den situation er der fortsat behov for en politisk indsats for at skabe arbejdspladser på kort og på lang sigt, bl.a. gennem grøn omstilling, at bekæmpe ulighed, fattigdom og social dumping samt at løfte Danmark uddannelsesmæssigt, så den næste generation bliver den dygtigste nogen sinde."
[4] "Forslag til lov om akutjob og jobpræmie til arbejdsgivere."
[5] "Forslag til lov om ændring af virksomhedsskatteloven og kildeskatteloven. (Indgreb mod utilsigtet udnyttelse af virksomhedsordningen ved indskud af privat gæld m.v.)."
[6] "Forslag til folketingsbeslutning om dansk militært bidrag til støtte for indsatsen i Irak."
roll_call_results_ft$ministry
Each proposal that is being voted on in Folketinget is assigned to one ministry that is responsible for handling the government’s end. The name of that ministry is stored in this variable for each observation. Ministry names are stored as values of the type character in Danish language.
This variable is joined from ministries_lookup based on roll_call_info_raw$sagid and corresponds to the navn variable in the SagAktør resource in the Folketing online database, filtered for those aktørid values that are designated as Ministerområde (rolleid = 6) for the Sag in question.
head(roll_call_results_ft$ministry)[1] NA "Skatteministeriet"
[3] NA "Beskæftigelsesministeriet"
[5] "Skatteministeriet" "Udenrigsministeriet"
Note that since designations and areas of responsibilities have changed over time, there will be several instances of, e.g. transport ministries (Transportministeriet, Transport- og Energiministeriet, Transport- og Boligministeriet, Transport- og Bygningsministeriet as well as Transport-, Bygnings- og Boligministeriet). See northatlantic_ft$ministry for a list of all occurring ministries.
roll_call_results_ft$ft_for
In ft_for, the number of votes cast in favor of a proposal is stored as numeric variable of the type double.
The open records kept by Folketinget are inconsistent regarding the coding of roll call results: Overall results are stored in a single result_string in Danish, listing votes in favor as well as votes against and abstentions in the same string. However, for some records, there are no result strings listing the vote counts (technically, there are empty strings). For these records, records have to be pulled using the API individually. This concerns 2895 out of 10478 observations as of February 2026. Affected are mostly votes from dates earlier than June 2010, when Folketinget appears to have switched their way of record keeping to the current setup with results given as a string.
In add_ft_results.R, the overall count of votes in favor of the proposal are first extracted from result_string (where available) using str_nth_number() from the strex package (Nolan 2024). Even though the wording used in the roll call result string also differs over time, I rely on the order of the results being presented to extract the votes in favor of the proposal at hand. In a second step, I filter those cases in roll_call_results_ft where there is an empty string in result_string (2895 out of 10478). For those observations, I retrieve the number of votes in favor from the Folketinget ODA API. This information is then merged back into the roll_call_results_ft data frame.
The maximum value stored in ft_for is 162 and the minimum value stored in ft_for is 0. As the total number of MPs in Folketinget is 179, the value of ft_for cannot be greater than 179.
summary(roll_call_results_ft$ft_for) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0.00 28.00 61.00 63.96 101.00 162.00 1
for vote counts in roll call votes. Dashed lines designate general Folketinget elections.
roll_call_results_ft$ft_against
In ft_against, the number of votes cast in favor of a proposal is stored as numeric variable of the type double.
The open records kept by Folketinget are inconsistent regarding the coding of roll call results: Overall results are stored in a single result_string in Danish, listing votes against as well as votes in favor and abstentions in the same string. However, for some records, there are no result strings listing the vote counts (technically, there are empty strings). For these records, records have to be pulled using the API individually. This concerns 2895 out of 10478 observations as of February 2026. Affected are mostly votes from dates earlier than June 2010, when Folketinget appears to have switched their way of record keeping to the current setup with results given as a string.
In add_ft_results.R, the overall count of votes against of the proposal are first extracted from result_string (where available) using str_nth_number() from the strex package (Nolan 2024). Even though the wording used in the roll call result string also differs over time, I rely on the order of the results being presented to extract the votes against the proposal at hand. In a second step, I filter those cases in roll_call_results_ft where there is an empty string in result_string (2895 out of 10478). For those observations, I retrieve the number of votes against from the Folketinget ODA API. This information is then merged back into the roll_call_results_ft data frame.
The maximum value stored in ft_against is 124 and the minimum value stored in ft_against is 0. As the total number of MPs in Folketinget is 179, the value of ft_against cannot be greater than 179.
summary(roll_call_results_ft$ft_against) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0.00 2.00 42.00 39.81 71.00 124.00 1
against vote counts in roll call votes. Dashed lines designate general Folketinget elections.
roll_call_results_ft$ft_abstention
In ft_abstention, the number of abstentions in a vote is stored as numeric variable of the type double.
The open records kept by Folketinget are inconsistent regarding the coding of roll call results: Overall results are stored in a single result_string in Danish, listing abstentions against as well as votes in favor and against in the same string. However, for some records, there are no result strings listing the vote counts (technically, there are empty strings). For these records, records have to be pulled using the API individually. This concerns 2895 out of 10478 observations as of February 2026. Affected are mostly votes from dates earlier than June 2010, when Folketinget appears to have switched their way of record keeping to the current setup with results given as a string.
In add_ft_results.R, the overall count of abstaining votes on the proposal are first extracted from result_string (where available) using str_nth_number() from the strex package (Nolan 2024). Even though the wording used in the roll call result string also differs over time, I rely on the order of the results being presented to extract the number of abstentions. In a second step, I filter those cases in roll_call_results_ft where there is an empty string in result_string (2895 out of 10478). For those observations, I retrieve the number of abstentions from the Folketinget ODA API. This information is then merged back into the roll_call_results_ft data frame.
The maximum value stored in ft_abstention is 56 and the minimum value stored in ft_abstention is 0. As the total number of MPs in Folketinget is 179, the value of ft_abstention cannot be greater than 179.
summary(roll_call_results_ft$ft_abstention) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0.000 0.000 0.000 2.384 0.000 56.000 1
abstention vote counts in roll call votes. Dashed lines designate general Folketinget elections.
roll_call_results_ft$ft_absent
In ft_absent, the number of MPs who were absent for each roll call is stored as numeric variable with values of the type double.
The number of absentees for each observation is calculated by substracting the sum of roll_call_results_ft$ft_for, roll_call_results_ft$ft_against and roll_call_results_ft$ft_abstention from 179, the fixed number of MPs in Folketinget.
The maximum value stored in ft_absent is 179 and the minimum value stored in ft_absent is 7. As the total number of MPs in Folketinget is 179, the value of ft_absent cannot be greater than 179.
summary(roll_call_results_ft$ft_absent) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
7.00 69.00 72.00 72.84 76.00 179.00 1
absent counts in roll call votes. Dashed lines designate general Folketinget elections.
roll_call_results_ft$ft_process_id
All legislative processes in Folketinget are assigned an ID by Folketingets åbne data service (ODA). Each process ID is thus a unique identifier for one process relating to legislation in Folketinget. All IDs are stored as values of the type integer as integer variable.
This variable corresponds to the sagstrinid variable and the Sagstrin resource in the Folketing online database.
head(roll_call_results_ft$ft_process_id)[1] NA 4849 17351 18370 4849 16581
roll_call_results_ft$ft_process_step
All legislative processes run their course through Folketinget in several steps which is described by ft_process_step. Process steps are stored as values of the type character in Danish language as character variable.
This variable corresponds to the titel variable in the Sagstrin resource in the Folketing online database.
head(roll_call_results_ft$ft_process_step)[1] NA "3. behandling" "Behandling"
[4] "3. behandling" "3. behandling" "2. (sidste) behandling"
roll_call_results_ft$roll_call_nr
In addition to the roll_call_id, all roll call procedures in Folketinget are also assigned a number by Folketingets åbne data service (ODA). Each roll call number is thus another identifier for one roll call in Folketinget. All roll call numbers are stored as values of the type integer as integer variable.
This variable corresponds to the roll_call_info_raw$nummer variable in the Afstemning resource in the Folketing online database. Take care not to confuse roll_call_nr with roll_call_id.
head(roll_call_results_ft$roll_call_nr)[1] 411 412 1 7 412 410
roll_call_results_ft$roll_call_type_id
All roll call procedures in Folketinget are categorised using numeric values that correspond to the type of roll call (Table 3). All roll call Type IDs are stored as values of the type integer as integer variable.
| ID | Type | English | n |
|---|---|---|---|
| 1 | Endelig vedtagelse | Final Adoption | 6038 |
| 2 | Udvalgsindstilling | Committee Recommendation Report | 14 |
| 3 | Forslag til vedtagelse | Proposed Adoption | 923 |
| 4 | Ændringsforslag | Amendment | 3503 |
This variable corresponds to typeid variable in roll_call_info_raw and the type variable in the Afstemningstype resource in the Folketing online database.
table(roll_call_results_ft$roll_call_type_id)
1 2 3 4
6038 14 923 3503
roll_call_results_ft$comment
If necessary, comments on each roll call are stored as values of the type character in Danish language. A Folketing wording standard for comment does not seem to exist, so the sentence structures and vocabulary differs a lot between observations. As per February 2026, there are 586 observations with comments (total number of observations: 10478). Comments on roll call results mostly regard human or technical errors, for example:
| Danish | English |
|---|---|
| Ved en fejl er der ikke registreret stemmeafgivning fra X’ plads. | By mistake, no vote was registeret at X’ seat. |
| Ved en fejl stemte X for/imod/hverken for eller imod forslaget. | By mistake, X voted for/against/neither for nor against the proposal. |
| Ved en fejl har X ikke fået stemt. | By mistake, X could not vote. |
| Ved en fejl fik X ikke afgivet sin stemme. | By mistake, X could not cast a vote. |
| Ved en fejl er Xs stemme registeret i Ys navn. | By mistake, X’ vote was registered as a vote by Y. |
| X stemte ved en fejl fra Y’s plads. | By mistake, X voted from Y’s seat. |
| 10 i X stemte ved en fejl for/imod/hverken for eller imod forslaget. | By mistake, 10 MPs from party X voted for/against/neither for nor against the proposal. |
| Ved en fejl er der registreret en stemme på X. | By mistake, a vote by X was recorded. |
| X undlod ved en fejl at stemme. | By mistake, X did not cast a vote. |
| Omafstemning | Voting Repeated |
head(roll_call_results_ft$comment)[1] NA NA NA NA NA NA
roll_call_results_ft$result_string
In result_string, roll call results are stored as values of the type character in Danish language. The variable indicates whether the proposal was adopted or not; how many votes were in favor resp. against or abstentions, and from which political parties these votes came. A Folketing wording standard for result_string does not seem to exist, so the sentence structures and vocabulary differs a lot between observations.
As per February 2026, there are 7583 observations with result character strings (total number of observations: 10478). For the observations where result_string is not NA, the values are used to calculate ft_for, ft_against and ft_abstention. Information on absent MPs is not provided in result_string but can be inferred from the other values.
head(roll_call_results_ft$result_string)[1] "Vedtaget\n\n108 stemmer for forslaget (V, S, DF, RV, SF, EL, LA, KF, UFG)\n\n0 stemmer imod forslaget\n\n0 stemmer hverken for eller imod forslaget\n\n"
[2] "Vedtaget\n\n98 stemmer for forslaget (V, S, DF, RV, SF, EL)\n\n10 stemmer imod forslaget (LA, KF)\n\n0 stemmer hverken for eller imod forslaget\n\n"
[3] "Vedtaget\n\n59 stemmer for forslaget (S, RV, SF, EL)\n\n54 stemmer imod forslaget (V, DF, LA, KF)\n\n0 stemmer hverken for eller imod forslaget\n\n"
[4] "Vedtaget\n\n72 stemmer for forslaget (S, DF, RV, SF, EL)\n\n10 stemmer imod forslaget (LA, KF)\n\n26 stemmer hverken for eller imod forslaget (V)\n\n"
[5] "Vedtaget\n\n98 stemmer for forslaget (V, S, DF, RV, SF, EL)\n\n10 stemmer imod forslaget (LA, KF)\n\n0 stemmer hverken for eller imod forslaget\n\n"
[6] "\nVedtaget\n\n104 stemmer for forslaget (V, S, DF, RV, SF, EL, LA, KF, UFG)\n\n0 stemmer imod forslaget\n\n0 stemmer hverken for eller imod forslaget\n\n"
roll_call_info_raw
roll_call_info_raw contains the downloaded data on voting records before any preprocessing. As per February 2026, roll_call_info_raw.rds contains 10478 observations of 13 variables.
roll_call_info_raw is provided as rds file in /data/raw/. The processed data is available as rds file in /data/processed.
str(roll_call_info_raw)'data.frame': 10478 obs. of 13 variables:
$ id : int 1 2 3 4 5 6 7 8 9 10 ...
$ nummer : int 411 412 1 7 412 410 408 407 404 405 ...
$ konklusion : chr "Vedtaget\n\n108 stemmer for forslaget (V, S, DF, RV, SF, EL, LA, KF, UFG)\n\n0 stemmer imod forslaget\n\n0 stem"| __truncated__ "Vedtaget\n\n98 stemmer for forslaget (V, S, DF, RV, SF, EL)\n\n10 stemmer imod forslaget (LA, KF)\n\n0 stemmer "| __truncated__ "Vedtaget\n\n59 stemmer for forslaget (S, RV, SF, EL)\n\n54 stemmer imod forslaget (V, DF, LA, KF)\n\n0 stemmer "| __truncated__ "Vedtaget\n\n72 stemmer for forslaget (S, DF, RV, SF, EL)\n\n10 stemmer imod forslaget (LA, KF)\n\n26 stemmer hv"| __truncated__ ...
$ vedtaget : logi TRUE TRUE TRUE TRUE TRUE TRUE ...
$ kommentar : chr NA NA "" "" ...
$ mødeid : int 17 18 41 156 18 15 962 962 962 962 ...
$ typeid : int 2 1 3 1 1 1 1 1 1 1 ...
$ sagstrinid : int NA 4849 17351 18370 4849 16581 3311 3220 4856 2500 ...
$ sagstrin_titel : chr NA "3. behandling" "Behandling" "3. behandling" ...
$ sagid : int NA 1449 5604 5904 1449 5384 930 910 1451 780 ...
$ sag_titel : chr NA "Forslag til lov om ændring af virksomhedsskatteloven og kildeskatteloven. (Indgreb mod utilsigtet udnyttelse af"| __truncated__ "Folketinget konstaterer, at Danmark stod dårligt rustet til at stå imod den økonomiske krise og derfor mistede "| __truncated__ "Forslag til lov om akutjob og jobpræmie til arbejdsgivere." ...
$ dato : POSIXct, format: "2014-09-09 09:00:00" "2014-09-09 09:15:00" ...
$ opdateringsdato: POSIXct, format: "2014-09-09 09:05:59" "2014-09-09 09:25:05" ...
Descriptions of all variables in roll_call_info_raw are provided in the following sections.
roll_call_info_raw$id
See roll_call_results_ft$roll_call_id. Take care not to confuse id with nummer. In the raw data, id is stored as integer value.
head(roll_call_info_raw$id)[1] 1 2 3 4 5 6
roll_call_info_raw$nummer
See roll_call_results_ft$roll_call_nr. Take care not to confuse nummer with id. In the raw data, nummer is stored as integer value.
head(roll_call_info_raw$nummer)[1] 411 412 1 7 412 410
roll_call_info_raw$konklusion
See roll_call_results_ft$result_string. In the raw data, konklusion is stored as character value.
head(roll_call_info_raw$konklusion)[1] "Vedtaget\n\n108 stemmer for forslaget (V, S, DF, RV, SF, EL, LA, KF, UFG)\n\n0 stemmer imod forslaget\n\n0 stemmer hverken for eller imod forslaget\n\n"
[2] "Vedtaget\n\n98 stemmer for forslaget (V, S, DF, RV, SF, EL)\n\n10 stemmer imod forslaget (LA, KF)\n\n0 stemmer hverken for eller imod forslaget\n\n"
[3] "Vedtaget\n\n59 stemmer for forslaget (S, RV, SF, EL)\n\n54 stemmer imod forslaget (V, DF, LA, KF)\n\n0 stemmer hverken for eller imod forslaget\n\n"
[4] "Vedtaget\n\n72 stemmer for forslaget (S, DF, RV, SF, EL)\n\n10 stemmer imod forslaget (LA, KF)\n\n26 stemmer hverken for eller imod forslaget (V)\n\n"
[5] "Vedtaget\n\n98 stemmer for forslaget (V, S, DF, RV, SF, EL)\n\n10 stemmer imod forslaget (LA, KF)\n\n0 stemmer hverken for eller imod forslaget\n\n"
[6] "\nVedtaget\n\n104 stemmer for forslaget (V, S, DF, RV, SF, EL, LA, KF, UFG)\n\n0 stemmer imod forslaget\n\n0 stemmer hverken for eller imod forslaget\n\n"
roll_call_info_raw$vedtaget
See roll_call_results_ft$roll_call_pass. In the raw data, vedtaget is stored as logical value.
summary(roll_call_info_raw$vedtaget) Mode FALSE TRUE
logical 4840 5638
roll_call_info_raw$kommentar
See roll_call_results_ft$comment. In the raw data, kommentar is stored as character value.
head(roll_call_info_raw$kommentar)[1] NA NA "" "" "" ""
roll_call_info_raw$mødeid
See roll_call_results_ft$meeting_id. In the raw data, mødeid is stored as integer value.
head(roll_call_info_raw$mødeid)[1] 17 18 41 156 18 15
roll_call_info_raw$typeid
See roll_call_results_ft$roll_call_type_id. In the raw data, typeid is stored as integer value.
table(roll_call_info_raw$typeid)
1 2 3 4
6038 14 923 3503
roll_call_info_raw$sagstrinid
See roll_call_results_ft$ft_process_id. In the raw data, sagstrinid is stored as integer value. Take care not to confuse sagstrinid with roll_call_info_raw$sagid.
head(roll_call_info_raw$sagstrinid)[1] NA 4849 17351 18370 4849 16581
roll_call_info_raw$sagstrin_titel
See roll_call_results_ft$ft_process_step. In the raw data, sagstrin_titel is stored as character value.
head(roll_call_info_raw$sagstrin_titel)[1] NA "3. behandling" "Behandling"
[4] "3. behandling" "3. behandling" "2. (sidste) behandling"
roll_call_info_raw$sagid
All legislation in Folketinget are assigned an ID by Folketingets åbne data service (ODA). Each sagid is thus a unique identifier for one issue being handled in Folketinget. All IDs are stored as values of the type integer. Take care not to confuse sagid with roll_call_info_raw$sagstrinid. sagid is used to match the responsible ministry to each proposal in roll_call_results_ft.
This variable corresponds to the sagid variable and the Sag resource in the Folketing online database.
head(roll_call_info_raw$sagid)[1] NA 1449 5604 5904 1449 5384
roll_call_info_raw$sag_titel
See roll_call_results_ft$ft_topic. In the raw data, sag_titel is stored as character value.
head(roll_call_info_raw$sag_titel)[1] NA
[2] "Forslag til lov om ændring af virksomhedsskatteloven og kildeskatteloven. (Indgreb mod utilsigtet udnyttelse af virksomhedsordningen ved indskud af privat gæld m.v.)."
[3] "Folketinget konstaterer, at Danmark stod dårligt rustet til at stå imod den økonomiske krise og derfor mistede uforholdsmæssigt mange arbejdspladser. Den økonomiske krise har fortsat et alvorligt tag i Danmark.\n\nI den situation er der fortsat behov for en politisk indsats for at skabe arbejdspladser på kort og på lang sigt, bl.a. gennem grøn omstilling, at bekæmpe ulighed, fattigdom og social dumping samt at løfte Danmark uddannelsesmæssigt, så den næste generation bliver den dygtigste nogen sinde."
[4] "Forslag til lov om akutjob og jobpræmie til arbejdsgivere."
[5] "Forslag til lov om ændring af virksomhedsskatteloven og kildeskatteloven. (Indgreb mod utilsigtet udnyttelse af virksomhedsordningen ved indskud af privat gæld m.v.)."
[6] "Forslag til folketingsbeslutning om dansk militært bidrag til støtte for indsatsen i Irak."
roll_call_info_raw$dato
See roll_call_results_ft$date. In the raw data, dato is stored as POSIXct, POSIXt value.
head(roll_call_info_raw$dato)[1] "2014-09-09 09:00:00 UTC" "2014-09-09 09:15:00 UTC"
[3] "2012-10-04 10:00:00 UTC" "2012-11-06 00:00:00 UTC"
[5] "2014-09-09 09:15:00 UTC" "2014-08-27 17:00:00 UTC"
roll_call_info_raw$opdateringsdato
This variable is used to check against the API for updated records. In the raw data, opdateringsdato is stored as POSIXct, POSIXt value.
head(roll_call_info_raw$opdateringsdato)[1] "2014-09-09 09:05:59 UTC" "2014-09-09 09:25:05 UTC"
[3] "2018-01-24 16:46:33 UTC" "2018-01-25 10:25:25 UTC"
[5] "2017-08-10 12:57:52 UTC" "2017-08-10 12:57:52 UTC"
ministries_lookup
ministries_lookup contains information on the ministry assigned to each proposal (Sag). As per February 2026, ministries_lookup.rds contains 72366 observations of 3 variables.
ministries_lookup is provided as rds file in /data/raw/. It is being joined to roll_call_results_ft by matching with roll_call_info_raw$sagid.
str(ministries_lookup)tibble [72,366 × 3] (S3: tbl_df/tbl/data.frame)
$ sagid : int [1:72366] 1 2 3 8 9 12 13 14 15 16 ...
$ ministerium : chr [1:72366] "Finansministeriet" "Forsvarsministeriet" "Undervisningsministeriet" "Finansministeriet" ...
$ opdateringsdato: POSIXct[1:72366], format: "2015-06-23 10:32:14" "2017-12-05 19:42:22" ...
Descriptions of all variables in ministries_lookup are provided in the following sections.
ministries_lookup$sagid
See roll_call_results_raw$sagid.
head(ministries_lookup$sagid)[1] 1 2 3 8 9 12
ministries_lookup$ministerium
See roll_call_results_ft$ministry.
head(ministries_lookup$ministerium)[1] "Finansministeriet" "Forsvarsministeriet"
[3] "Undervisningsministeriet" "Finansministeriet"
[5] "Erhvervs- og Vækstministeriet" "Udenrigsministeriet"
ministries_lookup$opdateringsdato
This variable is used to check against the API for updated records. In the raw data, opdateringsdato is stored as POSIXct, POSIXt value.
head(ministries_lookup$opdateringsdato)[1] "2015-06-23 10:32:14 UTC" "2017-12-05 19:42:22 UTC"
[3] "2017-12-05 19:43:50 UTC" "2017-12-05 19:44:13 UTC"
[5] "2017-12-05 19:44:13 UTC" "2017-12-05 19:44:13 UTC"
cabinets_fo
The dataset contains information on the coalition governments of the Faroe Islands (Landsstýri), in particular a timeline including the parties that are part of each cabinet. As per February 2026, cabinets_fo contains information on 10 cabinets stored in 12 variables. This data set spans the timeframe covered by the voting database – from October 07, 2004 until the most recent update of this data set on February 15, 2026.
cabinets_fo is provided as rds file in /data/processed and csv file in /data/processed/csv. Metadata for the csv file is provided in an accompanying json metadata file.
See also cabinets_gl and cabinets_dk.
str(cabinets_fo)'data.frame': 10 obs. of 12 variables:
$ cabinet : chr "kallsberg_2" "eidesgaard_1" "eidesgaard_2" "johannesen-k-l_1-1" ...
$ wikidata_id: Factor w/ 8 levels "Q115858267","Q1212499",..: 6 4 2 8 8 5 5 3 7 1
$ location : Factor w/ 1 level "FO": 1 1 1 1 1 1 1 1 1 1
$ start : Date, format: "2002-06-06" "2004-02-03" ...
$ end : Date, format: "2004-02-03" "2008-02-04" ...
$ FO_A : logi TRUE TRUE FALSE TRUE FALSE TRUE ...
$ FO_B : logi FALSE TRUE FALSE TRUE TRUE TRUE ...
$ FO_C : logi FALSE TRUE TRUE TRUE TRUE FALSE ...
$ FO_D : logi TRUE FALSE FALSE FALSE FALSE TRUE ...
$ FO_E : logi TRUE FALSE TRUE FALSE FALSE FALSE ...
$ FO_F : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
$ FO_H : logi TRUE FALSE TRUE FALSE FALSE TRUE ...
Descriptions of all variables in cabinets_fo are provided in the following sections.
cabinets_fo$cabinet
Each cabinet formed in the Faroe Islands (Landsstýri) is assigned a human-readable identifier. The cabinets are usually named after the head of government, using their surname(s), followed by an integer number for multiple cabinets headed by the same person. Because in the timeframe covered by this data set, there have been two Faroese governments with a PM named Johannesen, the first letter of their first name is also appended to the cabinet variable. This variable is stored as value of the type character as character variable.
head(cabinets_fo$cabinet)[1] "kallsberg_2" "eidesgaard_1" "eidesgaard_2"
[4] "johannesen-k-l_1-1" "johannesen-k-l_1-2" "johannesen-k-l_2-1"
cabinets_fo$wikidata_id
The wikidata_id variable stores the QID linking to the Wikidata entity representing the cabinet in question, making it easy to retrieve additional information from Wikidata, if necessary. This variable is stored as value of the type integer as factor variable.
head(cabinets_fo$wikidata_id)[1] Q531981 Q368075 Q1212499 Q989048 Q989048 Q5203949
8 Levels: Q115858267 Q1212499 Q20972153 Q368075 Q5203949 Q531981 ... Q989048
cabinets_fo$location
location indicates where a cabinet is formed – in the Faroe Islands (FO). This variable is stored as value of the type integer as factor variable. When merging data, this proved to be helpful to distinguish between the different political parties, some of which share a common abbreviation across regions.
summary(cabinets_fo$location)FO
10
cabinets_fo$start
The date on which each cabinet is formed is stored as Date variable of the type double. Calendar information is formatted as %Y-%m-%d, the earliest entry being from June 06, 2002 (2002-06-06) and the most recent entry from December 22, 2022 (2022-12-22) as of February 2026.
head(cabinets_fo$start)[1] "2002-06-06" "2004-02-03" "2008-02-04" "2008-09-26" "2011-04-06"
[6] "2011-11-14"
cabinets_fo$end
The date on which each cabinet is succeeded by the next one is stored as Date variable of the type double. Calendar information is formatted as %Y-%m-%d, the earliest entry being from February 03, 2004 (2004-02-03) as of February 2026.
Note that this date does not necessarily correspond to the date when a government ‘collapses’ or officially announces its resignation. Rather, the date denotes the day of the transition of power to the next cabinet.
head(cabinets_fo$end)[1] "2004-02-03" "2008-02-04" "2008-09-26" "2011-04-06" "2011-11-14"
[6] "2013-09-09"
cabinets_fo$FO_A
FO_A indicates whether the Faroese political party Fólkaflokkurin (A) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in FO_A which only stores statements on official cabinet membership.
summary(cabinets_fo$FO_A) Mode FALSE TRUE
logical 4 6
cabinets_fo$FO_B
FO_B indicates whether the Faroese political party Sambandsflokkurin (B) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in FO_B which only stores statements on official cabinet membership.
summary(cabinets_fo$FO_B) Mode FALSE TRUE
logical 4 6
cabinets_fo$FO_C
FO_C indicates whether the Faroese political party Javnaðarflokkurin (C) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in FO_C which only stores statements on official cabinet membership.
summary(cabinets_fo$FO_C) Mode FALSE TRUE
logical 4 6
cabinets_fo$FO_D
FO_D indicates whether the Faroese political party Sjálvstýri (D) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in FO_D which only stores statements on official cabinet membership.
summary(cabinets_fo$FO_D) Mode FALSE TRUE
logical 8 2
cabinets_fo$FO_E
FO_E indicates whether the Faroese political party Tjóðveldi (E) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in FO_E which only stores statements on official cabinet membership.
summary(cabinets_fo$FO_E) Mode FALSE TRUE
logical 6 4
cabinets_fo$FO_F
FO_F indicates whether the Faroese political party Framsókn (F) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in FO_F which only stores statements on official cabinet membership.
summary(cabinets_fo$FO_F) Mode FALSE TRUE
logical 8 2
cabinets_fo$FO_H
FO_H indicates whether the Faroese political party Miðflokkurin (H) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in FO_H which only stores statements on official cabinet membership.
summary(cabinets_fo$FO_H) Mode FALSE TRUE
logical 5 5
cabinets_gl
The dataset contains information on the coalition governments of Greenland (Naalakersuisut), in particular a timeline including the parties that are part of each cabinet. As per February 2026, cabinets_gl contains information on 18 cabinets stored in 13 variables. This data set spans the timeframe covered by the voting database – from October 07, 2004 until the most recent update of this data set on February 15, 2026.
cabinets_gl is provided as rds file in /data/processed and csv file in /data/processed/csv. Metadata for the csv file is provided in an accompanying json metadata file.
See also cabinets_fo and cabinets_dk.
str(cabinets_gl)'data.frame': 18 obs. of 13 variables:
$ cabinet : chr "enoksen_3" "enoksen_4" "enoksen_5" "kleist_1" ...
$ wikidata_id: Factor w/ 18 levels "Q105834380","Q106797236",..: 15 16 12 11 4 17 18 6 7 8 ...
$ location : Factor w/ 1 level "GL": 1 1 1 1 1 1 1 1 1 1 ...
$ start : Date, format: "2003-09-13" "2005-12-01" ...
$ end : Date, format: "2005-12-01" "2007-05-01" ...
$ GL_A : logi FALSE TRUE TRUE FALSE TRUE TRUE ...
$ GL_D : logi FALSE FALSE FALSE TRUE FALSE FALSE ...
$ GL_IA : logi TRUE TRUE FALSE TRUE FALSE FALSE ...
$ GL_KP : logi FALSE FALSE FALSE TRUE FALSE FALSE ...
$ GL_N : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
$ GL_NQ : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
$ GL_PI : logi FALSE FALSE FALSE FALSE TRUE FALSE ...
$ GL_SIU : logi TRUE TRUE TRUE FALSE TRUE TRUE ...
Descriptions of all variables in cabinets_gl are provided in the following sections.
cabinets_gl$cabinet
Each cabinet formed in Greenland (Naalakkersuisut) is assigned a human-readable identifier. The cabinets are usually named after the head of government, using their surname(s), followed by an integer number for multiple cabinets headed by the same person. Because in the timeframe covered by this data set, there have been two Faroese governments with a PM named Johannesen, the first letter of their first name is also appended to the cabinet variable. This variable is stored as value of the type character as character variable.
head(cabinets_gl$cabinet)[1] "enoksen_3" "enoksen_4" "enoksen_5" "kleist_1" "hammond_1" "hammond_2"
cabinets_gl$wikidata_id
The wikidata_id variable stores the QID linking to the Wikidata entity representing the cabinet in question, making it easy to retrieve additional information from Wikidata, if necessary. This variable is stored as value of the type integer as factor variable.
head(cabinets_gl$wikidata_id)[1] Q99672345 Q99673310 Q7604757 Q7604603 Q12333085 Q99736342
18 Levels: Q105834380 Q106797236 Q111486937 Q12333085 Q133576206 ... Q99736347
cabinets_gl$location
location indicates where a cabinet is formed – in Greenland (GL). This variable is stored as value of the type integer as factor variable. When merging data, this proved to be helpful to distinguish between the different political parties, some of which share a common abbreviation across regions.
summary(cabinets_gl$location)GL
18
cabinets_gl$start
The date on which each cabinet is formed is stored as Date variable of the type double. Calendar information is formatted as %Y-%m-%d, the earliest entry being from September 13, 2003 (2003-09-13) and the most recent entry from April 07, 2025 (2025-04-07) as of February 2026.
head(cabinets_gl$start)[1] "2003-09-13" "2005-12-01" "2007-05-01" "2009-06-12" "2013-04-05"
[6] "2013-11-05"
cabinets_gl$end
The date on which each cabinet is succeeded by the next one is stored as Date variable of the type double. Calendar information is formatted as %Y-%m-%d, the earliest entry being from December 01, 2005 (2005-12-01) as of February 2026.
Note that this date does not necessarily correspond to the date when a government ‘collapses’ or officially announces its resignation. Rather, the date denotes the day of the transition of power to the next cabinet.
head(cabinets_gl$end)[1] "2005-12-01" "2007-05-01" "2009-06-12" "2013-04-05" "2013-11-05"
[6] "2014-10-01"
cabinets_gl$GL_A
GL_A indicates whether the Greenlandic political party Atassut (A) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in GL_A which only stores statements on official cabinet membership.
summary(cabinets_gl$GL_A) Mode FALSE TRUE
logical 9 9
cabinets_gl$GL_D
GL_D indicates whether the Greenlandic political party Demokraatit (D) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in GL_D which only stores statements on official cabinet membership.
summary(cabinets_gl$GL_D) Mode FALSE TRUE
logical 13 5
cabinets_gl$GL_IA
GL_IA indicates whether the Greenlandic political party Inuit Ataqatigiit (IA) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in GL_IA which only stores statements on official cabinet membership.
summary(cabinets_gl$GL_IA) Mode FALSE TRUE
logical 11 7
cabinets_gl$GL_KP
GL_KP indicates whether the Greenlandic political party Kattusseqatigiit Partiiat (KP) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in GL_KP which only stores statements on official cabinet membership.
summary(cabinets_gl$GL_KP) Mode FALSE TRUE
logical 17 1
cabinets_gl$GL_N
GL_N indicates whether the Greenlandic political party Naleraq (N) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in GL_N which only stores statements on official cabinet membership.
summary(cabinets_gl$GL_N) Mode FALSE TRUE
logical 15 3
cabinets_gl$GL_NQ
GL_NQ indicates whether the Greenlandic political party Nunatta Qitornai (NQ) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in GL_NQ which only stores statements on official cabinet membership.
summary(cabinets_gl$GL_NQ) Mode FALSE TRUE
logical 13 5
cabinets_gl$GL_PI
GL_PI indicates whether the Greenlandic political party Partii Inuit (PI) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in GL_PI which only stores statements on official cabinet membership.
summary(cabinets_gl$GL_PI) Mode FALSE TRUE
logical 17 1
cabinets_gl$GL_SIU
GL_SIU indicates whether the Greenlandic political party Siumut (SIU) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in GL_SIU which only stores statements on official cabinet membership.
summary(cabinets_gl$GL_SIU) Mode FALSE TRUE
logical 2 16
cabinets_dk
The dataset contains information on coalition governments of Denmark, in particular a timeline including the parties that are part of each cabinet. As per February 2026, cabinets_dk contains information on 10 cabinets stored in 13 variables. On this list are 3 red bloc/left-wing, 6 blue/right-wing and 1 cross-bloc cabinets. This data set spans the timeframe covered by the voting database – from October 07, 2004 until the most recent update of this data set on February 15, 2026.
cabinets_dk is provided as rds file in /data/processed and csv file in /data/processed/csv. Metadata for the csv file is provided in an accompanying json metadata file.
See also cabinets_fo and cabinets_gl.
str(cabinets_dk)'data.frame': 10 obs. of 13 variables:
$ cabinet : chr "rasmussen-a-f_1" "rasmussen-a-f_2" "rasmussen-a-f_3" "rasmussen-l-l_1" ...
$ wikidata_id: Factor w/ 10 levels "Q115694681","Q1485892",..: 3 7 5 2 9 4 6 8 10 1
$ bloc : Factor w/ 3 levels "across","left",..: 3 3 3 3 2 2 3 3 2 1
$ type : Factor w/ 2 levels "coalition","single_party": 1 1 1 1 1 1 2 1 2 1
$ start : Date, format: "2001-11-27" "2005-02-18" ...
$ end : Date, format: "2005-02-18" "2007-11-23" ...
$ DK_A : logi FALSE FALSE FALSE FALSE TRUE TRUE ...
$ DK_B : logi FALSE FALSE FALSE FALSE TRUE TRUE ...
$ DK_C : logi TRUE TRUE TRUE TRUE FALSE FALSE ...
$ DK_F : logi FALSE FALSE FALSE FALSE TRUE FALSE ...
$ DK_I : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
$ DK_M : logi FALSE FALSE FALSE FALSE FALSE FALSE ...
$ DK_V : logi TRUE TRUE TRUE TRUE FALSE FALSE ...
Descriptions of all variables in cabinets_dk are provided in the following sections.
cabinets_dk$cabinet
Each cabinet formed in Denmark is assigned a human-readable identifier. The cabinets are usually named after the head of government, using their surname(s), followed by an integer number for multiple cabinets headed by the same person. Because in the timeframe covered by this data set, there have been two Danish governments with a PM named Rasmussen, the first letter of their first name is also appended to the cabinet variable. This variable is stored as value of the type character as character variable.
head(cabinets_dk$cabinet)[1] "rasmussen-a-f_1" "rasmussen-a-f_2" "rasmussen-a-f_3"
[4] "rasmussen-l-l_1" "thorning-schmidt_1" "thorning-schmidt_2"
cabinets_dk$wikidata_id
The wikidata_id variable stores the QID linking to the Wikidata entity representing the cabinet in question, making it easy to retrieve additional information from Wikidata, if necessary. This variable is stored as value of the type integer as factor variable.
head(cabinets_dk$wikidata_id)[1] Q1549269 Q2137611 Q1890260 Q1485892 Q283704 Q15707210
10 Levels: Q115694681 Q1485892 Q1549269 Q15707210 Q1890260 ... Q64831553
cabinets_dk$bloc
bloc indicates whether a cabinet belongs to either the red/left or blue/right section of the political spectrum or if it is formed across both blocs. This variable is stored as value of the type integer as factor variable.
summary(cabinets_dk$bloc)across left right
1 3 6
cabinets_dk$type
type indicates whether a cabinet is formed by a single politial party or if it is a coalition government. This variable is stored as value of the type integer as factor variable.
Note that a single_party cabinet does not necessarily have the majority of seats in parliament. The cabinet in question may instead rely on informal support agreements with other political parties that are not officially part of the cabinet.
summary(cabinets_dk$type) coalition single_party
8 2
cabinets_dk$start
The date on which each cabinet is formed is stored as Date variable of the type double. Calendar information is formatted as %Y-%m-%d, the earliest entry being from November 27, 2001 (2001-11-27) and the most recent entry from December 15, 2022 (2022-12-15) as of February 2026.
head(cabinets_dk$start)[1] "2001-11-27" "2005-02-18" "2007-11-23" "2009-04-05" "2011-10-03"
[6] "2014-02-03"
cabinets_dk$end
The date on which each cabinet is succeeded by the next one is stored as Date variable of the type double. Calendar information is formatted as %Y-%m-%d, the earliest entry being from February 18, 2005 (2005-02-18) as of February 2026.
Note that this date does not necessarily correspond to the date when a government ‘collapses’ or officially announces its resignation. Rather, the date denotes the day of the transition of power to the next cabinet.
head(cabinets_dk$end)[1] "2005-02-18" "2007-11-23" "2009-04-05" "2011-10-03" "2014-02-03"
[6] "2015-06-28"
cabinets_dk$DK_A
DK_A indicates whether the Danish political party Socialdemokratiet (A) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in DK_A which only stores statements on official cabinet membership.
summary(cabinets_dk$DK_A) Mode FALSE TRUE
logical 6 4
cabinets_dk$DK_B
DK_B indicates whether the Danish political party Radikale Venstre (B) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in DK_B which only stores statements on official cabinet membership.
summary(cabinets_dk$DK_B) Mode FALSE TRUE
logical 8 2
cabinets_dk$DK_C
DK_C indicates whether the Danish political party Det Konservative Folkeparti (C) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in DK_C which only stores statements on official cabinet membership.
summary(cabinets_dk$DK_C) Mode FALSE TRUE
logical 5 5
cabinets_dk$DK_F
DK_F indicates whether the Danish political party Socialistisk Folkeparti (F) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in DK_F which only stores statements on official cabinet membership.
summary(cabinets_dk$DK_F) Mode FALSE TRUE
logical 9 1
cabinets_dk$DK_I
DK_I indicates whether the Danish political party Liberal Alliance (I) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in DK_I which only stores statements on official cabinet membership.
summary(cabinets_dk$DK_I) Mode FALSE TRUE
logical 9 1
cabinets_dk$DK_M
DK_M indicates whether the Danish political party Moderaterne (M) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in DK_M which only stores statements on official cabinet membership.
summary(cabinets_dk$DK_M) Mode FALSE TRUE
logical 9 1
cabinets_dk$DK_V
DK_V indicates whether the Danish political party Venstre (V) is member of the cabinet. This variable is stored as value of the type logical as logical variable.
Note that a cabinet may rely on more political parties/MPs to maintain a majority. These situations are not reflected in DK_V which only stores statements on official cabinet membership.
summary(cabinets_dk$DK_V) Mode FALSE TRUE
logical 3 7
northatlantic_ft
The dataset contains data on voting records of the MPs specified in MP_names, created by processing and joining roll_call_results_ft, northatlantic_votes and information on cabinets from cabinets_fo, cabinets_gl and cabinets_dk as well as MP membership timelines from MP_dates. As per February 2026, northatlantic_ft contains 40899 observations of 22 variables.
northatlantic_ft is the resulting product of the targets pipeline and is provided as both rds file in /data/processed and csv file in /data/processed/csv. Metadata for the csv file is provided in an accompanying json metadata file.
str(northatlantic_ft)tibble [40,899 × 22] (S3: tbl_df/tbl/data.frame)
$ roll_call_id : int [1:40899] 1 1 1 1 2 2 2 2 283 283 ...
$ MP_id : Factor w/ 30 levels "13","247","262",..: 2 3 5 1 2 3 5 1 2 3 ...
$ surname : chr [1:40899] "Joensen" "Skaale" "Jakobsen" "Olsvig" ...
$ origin : Factor w/ 2 levels "FO","GL": 1 1 2 2 1 1 2 2 1 1 ...
$ party : Factor w/ 9 levels "A","B","C","E",..: 2 3 8 5 2 3 8 5 2 3 ...
$ gvt_party_at_home: logi [1:40899] TRUE FALSE TRUE FALSE TRUE FALSE ...
$ vote_type_id : Factor w/ 4 levels "1","2","3","4": 3 3 3 3 3 3 3 3 3 3 ...
$ vote_id : Factor w/ 41038 levels "154","158","161",..: 1 2 3 4 5 6 7 8 9 10 ...
$ roll_call_pass : logi [1:40899] TRUE TRUE TRUE TRUE TRUE TRUE ...
$ ft_process_step : chr [1:40899] NA NA NA NA ...
$ ministry : chr [1:40899] NA NA NA NA ...
$ ft_topic : chr [1:40899] NA NA NA NA ...
$ ft_for : num [1:40899] 108 108 108 108 98 98 98 98 91 91 ...
$ ft_against : num [1:40899] 0 0 0 0 10 10 10 10 13 13 ...
$ ft_abstention : num [1:40899] 0 0 0 0 0 0 0 0 0 0 ...
$ ft_absent : num [1:40899] 71 71 71 71 71 71 71 71 75 75 ...
$ date : Date[1:40899], format: "2014-09-09" "2014-09-09" ...
$ roll_call_type_id: int [1:40899] 2 2 2 2 1 1 1 1 3 3 ...
$ gvt_type_dk : Factor w/ 2 levels "coalition","single_party": 1 1 1 1 1 1 1 1 1 1 ...
$ gvt_bloc_dk : Factor w/ 3 levels "across","left",..: 2 2 2 2 2 2 2 2 2 2 ...
$ comment : chr [1:40899] NA NA NA NA ...
$ result_string : chr [1:40899] "Vedtaget\n\n108 stemmer for forslaget (V, S, DF, RV, SF, EL, LA, KF, UFG)\n\n0 stemmer imod forslaget\n\n0 stem"| __truncated__ "Vedtaget\n\n108 stemmer for forslaget (V, S, DF, RV, SF, EL, LA, KF, UFG)\n\n0 stemmer imod forslaget\n\n0 stem"| __truncated__ "Vedtaget\n\n108 stemmer for forslaget (V, S, DF, RV, SF, EL, LA, KF, UFG)\n\n0 stemmer imod forslaget\n\n0 stem"| __truncated__ "Vedtaget\n\n108 stemmer for forslaget (V, S, DF, RV, SF, EL, LA, KF, UFG)\n\n0 stemmer imod forslaget\n\n0 stem"| __truncated__ ...
Descriptions of all variables in northatlantic_ft are provided in the following sections.
northatlantic_ft$roll_call_id
All roll call procedures in Folketinget are assigned an ID by Folketingets åbne data service (ODA). Each roll call ID is thus a unique identifier for one roll call in Folketinget. All IDs are stored as values of the type integer as integer variable.
This variable corresponds to the roll_call_results_ft$roll_call_id and the northatlantic_votes$roll_call_id variable and the Afstemning resource in the Folketing online database.
str(northatlantic_ft$roll_call_id) int [1:40899] 1 1 1 1 2 2 2 2 283 283 ...
northatlantic_ft$MP_id
Each MP is assigned an ID by Folketingets åbne data service (ODA). Each MP_id thus is a unique identifier for one member of Folketinget. All IDs are stored as values of the type integer as factor variable. It is possible to use these IDs e.g. for querying the online database to retrieve documents that relate to a given MP or to find out which parliamentary processes this MP has been engaged in. The Folketing ID is also available as Wikidata Property P10207.
str(northatlantic_ft$MP_id) Factor w/ 30 levels "13","247","262",..: 2 3 5 1 2 3 5 1 2 3 ...
northatlantic_ft$surname
All surname(s) are stored as values of the type character. Names are spelled according to standardised orthography and, in terms of morphology, in nominative (Faroese) resp. absolutive (Greenlandic) case. Because there are be multiple MPs with the same surname(s), refer to northatlantic_ft$MP_id instead for reliable identification.
str(northatlantic_ft$surname) chr [1:40899] "Joensen" "Skaale" "Jakobsen" "Olsvig" "Joensen" "Skaale" ...
northatlantic_ft$origin
Using ISO 3166-2 codes, origin indicates whether an MP was elected in either Greenland (GL) or the Faroe Islands (FO). This variable is stored as value of the type integer as factor variable. Note that this only indicates where the MP in question ran for office. MPs with ties to Greenland or the Faroe Islands who won a Folketinget mandate in a continental election district are thus not part of this data set, as they are not considered Northatlantic MPs.
summary(northatlantic_ft$origin) FO GL
20453 20446
northatlantic_ft$party
The political party that each MP belongs to at the time of the vote is stored as value of the type integer as factor variable.
Since 2004, MPs from the Faroe Islands were members of 4 different political parties. Voters in Greenland elected politicians from 2 different political parties. However, as per February 2026, there have been two MPs from Greenland who left their party – Siumut, in both cases – during their time in office and joined other parties (Nunatta Qitornai and Naleraq3).
summary(northatlantic_ft$party) A B C E IA N NQ SIU UF
1269 6941 6885 5358 10219 381 655 8417 774
northatlantic_ft$gvt_party_at_home
gvt_party_at_home is created by using match_home_government() on northatlantic_ft, and cabinets_fo resp. cabinets_gl, indicating whether the MP is a member of a political party that is part of the governing Naalakkersuisut (GL) resp. Landsstýri (FO) at the time. See cabinets_fo and cabinets_gl.
summary(northatlantic_ft$gvt_party_at_home) Mode FALSE TRUE
logical 15750 25149
northatlantic_ft$vote_type_id
northatlantic_ft is a result of join_results() in which vote_type_id is joined from northatlantic_votes$vote_type_id. See northatlantic_votes$vote_type_id.
summary(northatlantic_ft$vote_type_id) 1 2 3 4
355 326 40085 133
northatlantic_ft$vote_id
All votes cast in Folketinget are assigned an ID by Folketingets åbne data service (ODA). Each vote ID is thus a unique identifier for one vote cast in Folketinget. All IDs are stored as values of the type integer as factor variable.
This variable corresponds to the id variable and the Stemme resource in the Folketing online database. See northatlantic_votes$votes_id.
str(northatlantic_ft$vote_id) Factor w/ 41038 levels "154","158","161",..: 1 2 3 4 5 6 7 8 9 10 ...
northatlantic_ft$roll_call_pass
The result of all roll calls in Folketinget is stored in roll_call_pass as logical variable. If parliament votes in favor of a proposal, it passes and roll_call_pass is assigned TRUE; if parliament votes a proposal down, it does not pass and roll_call_pass is assigned FALSE.
This variable corresponds to the vedtaget variable in the Afstemning resource in the Folketing online database. See roll_call_results_ft$roll_call_pass.
summary(northatlantic_ft$roll_call_pass) Mode FALSE TRUE
logical 19019 21880
northatlantic_ft$ft_process_step
All legislative processes run their course through Folketinget in several steps which is described by ft_process_step. Process steps are stored as values of the type character in Danish language as character variable.
This variable corresponds to the titel variable in the Sagstrin resource in the Folketing online database. See roll_call_results_ft$ft_process_step.
str(northatlantic_ft$ft_process_step) chr [1:40899] NA NA NA NA "3. behandling" "3. behandling" "3. behandling" ...
northatlantic_ft$ministry
Each proposal that is being voted on in Folketinget is assigned to one ministry that is responsible for handling the government’s end. The name of that ministry is stored in this variable for each observation. Ministry names are stored as values of the type character in Danish language.
The values of this variable correspond to the navn variable in the SagAktør resource in the Folketing online database, filtered for those aktørid values that are designated as Ministerområde (rolleid = 6) for the Sag in question. See also ministries_lookup.
str(northatlantic_ft$ministry) chr [1:40899] NA NA NA NA "Skatteministeriet" "Skatteministeriet" ...
Note that since designations and areas of responsibilities have changed over time, there will be several instances of, e.g. transport ministries (Transportministeriet, Transport- og Energiministeriet, Transport- og Boligministeriet, Transport- og Bygningsministeriet as well as Transport-, Bygnings- og Boligministeriet).
northatlantic_ft$ft_topic
Each proposal that is being voted on in Folketinget has a description of the topic(s) that are mentioned in the proposal. This description is stored in ft_topic. Topic descriptions are stored as values of the type character.
This variable corresponds to the titel variable in the Sag resource in the Folketing online database (which additionally provides a shorter version with less formalised language in the titelkort variable). See roll_call_results_ft$ft_topic.
head(northatlantic_ft$ft_topic)[1] NA
[2] NA
[3] NA
[4] NA
[5] "Forslag til lov om ændring af virksomhedsskatteloven og kildeskatteloven. (Indgreb mod utilsigtet udnyttelse af virksomhedsordningen ved indskud af privat gæld m.v.)."
[6] "Forslag til lov om ændring af virksomhedsskatteloven og kildeskatteloven. (Indgreb mod utilsigtet udnyttelse af virksomhedsordningen ved indskud af privat gæld m.v.)."
northatlantic_ft$ft_for
See roll_call_results_ft$ft_for.
summary(northatlantic_ft$ft_for) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0.00 28.00 61.00 63.95 101.00 162.00 4
northatlantic_ft$ft_against
See roll_call_results_ft$ft_against.
summary(northatlantic_ft$ft_against) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0.00 2.00 43.00 40.02 72.00 124.00 4
northatlantic_ft$ft_abstention
See roll_call_results_ft$ft_abstention.
summary(northatlantic_ft$ft_abstention) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
0.000 0.000 0.000 2.401 0.000 56.000 4
northatlantic_ft$ft_absent
See roll_call_results_ft$ft_absent.
summary(northatlantic_ft$ft_absent) Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
7.00 69.00 72.00 72.64 75.00 160.00 4
northatlantic_ft$date
The date on which each roll call takes place in Folketinget is stored as Date variable of the type double. Calendar information is formatted as %Y-%m-%d, the earliest entry being from October 07, 2004 (2004-10-07) and the most recent entry from February 05, 2026 (2026-02-05) as of February 2026.
See roll_call_results_ft$date.
str(northatlantic_ft$date) Date[1:40899], format: "2014-09-09" "2014-09-09" "2014-09-09" "2014-09-09" "2014-09-09" ...
northatlantic_ft$roll_call_type_id
See roll_call_results_ft$roll_call_type_id.
table(northatlantic_ft$roll_call_type_id)
1 2 3 4
23324 56 3572 13947
northatlantic_ft$gvt_type_dk
gvt_type_dk is created by using match_danish_government() on cabinets_dk, indicating whether the Danish government is a coalition or a single-party government at the time of the observation. See cabinets_dk$type.
summary(northatlantic_ft$gvt_type_dk) coalition single_party
31755 9144
northatlantic_ft$gvt_bloc_dk
gvt_bloc_dk is created by using match_danish_government() on cabinets_dk, indicating the political bloc (left/red, right/blue or across) the Danish government belongs to at the time of the observation. See cabinets_dk$bloc.
summary(northatlantic_ft$gvt_bloc_dk)across left right
5804 13651 21444
northatlantic_ft$comment
See roll_call_results_ft$comment.
str(northatlantic_ft$comment) chr [1:40899] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA ...
northatlantic_ft$result_string
See roll_call_results_ft$result_string.
str(northatlantic_ft$result_string) chr [1:40899] "Vedtaget\n\n108 stemmer for forslaget (V, S, DF, RV, SF, EL, LA, KF, UFG)\n\n0 stemmer imod forslaget\n\n0 stem"| __truncated__ ...
References
Footnotes
See README or
_targets.R↩︎Both parties have been formed quite recently. See Ahlness (2020) for general information on Nunatta Qitornai and their policies. Nunatta Qitornai has de facto been dissolved after the 2021 Inatsisartut election (Hviid 2025).↩︎
Both parties have been formed quite recently. See Ahlness (2020) for general information on Nunatta Qitornai and their policies. Nunatta Qitornai has de facto been dissolved after the 2021 Inatsisartut election (Hviid 2025).↩︎