License

Copyright 2017 Carlos Paradis

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Introduction

This R Notebook presents some data exploration on the contributions received table (A).

library(data.table)
library(knitr)
contributions <- fread("data/Campaign_Contributions_Received_By_Hawaii_State_and_County_Candidates_From_November_8__2006_Through_November_8__2016.csv")

The goal, proposed by Daniel Gluck, executive director and general counsel of the Hawaii State Ethics Comission, is by tying two different tables, citizens are capable of asessing their candidate financial ties and hence external influence, for example, when they are deciding on bills.

The tables are the Campaign Contributions, and the Financial Interests Disclosure. More context concerning the tables will be added later. This R Notebook focus on the complications associated in connecting the two tables together.

The table is non-normalized and basically covers contributions from Contributors to Candidates as shown below.

Election Period

A total of 6 elections is covered for this data, with a large number of registered contributions per election period:

kable(contributions[,.(Frequency=length(`Candidate Name`)),by=c('Election Period')])
Election Period Frequency
2014-2016 21641
2012-2014 28074
2008-2010 35298
2006-2008 19508
2010-2012 23009
2009-2012(D3) 241

Office Types

Although the large number of registered contributions and time range can appear intimidating, the number of offices the contributions are associated to are much smaller:

kable(contributions[,.(Frequency=length(`Candidate Name`)),by=c('Office')])
Office Frequency
Hawaii Council 2059
Mayor 18900
Maui Council 6352
House 28510
Governor 25917
Honolulu Council 9134
Senate 21609
Kauai Council 4569
OHA 1415
Lt. Governor 6605
Prosecuting Attorney 2549
BOE (Not an elected office) 152

State-level offices

In this R Notebook, the focus will be on state level officials, as each county has it’s own ethics agency. Concretely, this reduces the offices of interest into Lt. Governor, OHA, Governor, House (of Representatives), and Senate. The next step, is then, to remove non-state level offices. If we inspect closely the data, we will observe identifying state-level offices is easy:

kable(contributions[,list(Contribution=length(`Candidate Name`)),by=c("Office","County")])
Office County Contribution
Hawaii Council Hawaii 2059
Mayor Maui 4367
Maui Council Maui 6352
House 28510
Governor 25917
Mayor Hawaii 2136
Honolulu Council Honolulu 9118
Mayor Honolulu 10828
Senate 21609
Kauai Council Kauai 4542
OHA 1415
Lt. Governor 6605
Prosecuting Attorney Kauai 299
Prosecuting Attorney Hawaii 659
Prosecuting Attorney Honolulu 1591
Kauai Council 1
BOE (Not an elected office) 152
Mayor Kauai 1569
Kauai Council Hawaii 26
Honolulu Council Hawaii 16

As their County information is left blank in the original table (aside a few exceptions!). By filtering out offices without county level role we are then able to reduce the list of contributions to a much smaller list of contributions:

kable(contributions[County=='',.(Frequency=length(`Candidate Name`)),by=c("Office","County")])
Office County Frequency
House 28510
Governor 25917
Senate 21609
OHA 1415
Lt. Governor 6605
Kauai Council 1
BOE (Not an elected office) 152
contributions <- contributions[County=='']

The Kauai Council appears to be an outline case:

kable(contributions[Office=='Kauai Council' & County == '',.(`Candidate Name`,Amount,`Contributor Name`)])
Candidate Name Amount Contributor Name
Agor, Ron $1000.00 Renoir, Jean Paul
contributions <- contributions[Office!='Kauai Council']

And the other office stands for Board of Education (BOE), which at this point we are not interested, so we will also filter them out:

contributions <- contributions[Office!='BOE (Not an elected office)' & Office!='Kauai Council']
kable(contributions[,.(Contribution=length(`Candidate Name`)),by=c("Office","County")])
Office County Contribution
House 28510
Governor 25917
Senate 21609
OHA 1415
Lt. Governor 6605

Primary and General Elections

For the state-level offices, let’s revisit again the election periods.

kable(contributions[,.(Frequency=length(`Candidate Name`)),by=c('Election Period')])
Election Period Frequency
2006-2008 13782
2012-2014 21151
2008-2010 24619
2010-2012 12506
2014-2016 11998

To begin with, let’s focus on the most recent election period.

2014-2016 Candidates

contributions <- contributions[`Election Period`=='2014-2016']

And to keep the number of candidates under control, let’s start by the Senate.

Senate

contributions.senate <- contributions[Office=='Senate']

What is the amount of contribution in USD senate candidates of the various parties are receiving per district?

#Formatting functions to help with text formatted amounts. 
dollar_to_numeric <- function(dollar_value){
  return (as.numeric(gsub("\\$", "",dollar_value)))
}
numeric_to_dollar <- function(x, ...) {
  return( paste0("$", formatC(as.numeric(x), format="f", digits=2, big.mark=",")))
}
contributions.senate.total <- contributions.senate[order(as.numeric(District),-Party,decreasing=TRUE),.(Amount=sum(dollar_to_numeric(Amount))),by=c("Candidate Name","District","Party")]
kable(contributions.senate.total[,.(`Candidate Name`,District,Amount=numeric_to_dollar(Amount),Party)])
Candidate Name District Amount Party
Thielen, Laura 25 $25,960.50 Democrat
Nagamine, Robert 25 $8,990.95 Republican
Tokuda, Jill 24 $48,003.75 Democrat
Riviere, Gil 23 $5,095.00 Democrat
Fale, Richard 23 $250.00 Republican
Dela Cruz, Donovan 22 $143,883.56 Democrat
Shimabukuro, Maile 21 $10,645.00 Democrat
Ku, Tercia 21 $111.00 Republican
Gabbard, Mike 20 $38,356.20 Democrat
Espero, William 19 $49,045.00 Democrat
Fidelibus, Christopher 19 $5,150.00 Republican
Fevella, Kurt 19 $2,200.00 Republican
Kidani, Michelle 18 $102,494.62 Democrat
Nishihara, Clarence 17 $12,800.00 Democrat
Harimoto, Breene 16 $6,595.00 Democrat
Wakai, Glenn 15 $67,079.52 Democrat
Kim, Donna 14 $125,850.00 Democrat
Campagna, Carl 14 $5,213.37 Democrat
Iwamoto, Kim Coco 13 $46,945.22 Democrat
Nakoa, Keone 13 $46,908.48 Democrat
Rhoads, Karl 13 $125,937.62 Democrat
Chun Oakland, Suzanne 13 $650.00 Democrat
Ozols, Harry 13 $220.83 Libertarian
Tam, Rodney 13 $4,989.15 Republican
Galuteria, Brickwood 12 $14,101.01 Democrat
Taniguchi, Brian 11 $45,155.00 Democrat
Ihara, Les 10 $12,903.00 Democrat
Farrell, David 10 $720.15 Democrat
Phillips, Arnold 10 $12,982.63 Libertarian
Chang, Stanley 9 $135,747.22 Democrat
Slom, Sam 9 $25,771.90 Republican
Ahuna, Kanoe 8 $8,037.39 Democrat
Kouchi, Ron 8 $211,201.77 Democrat
English, Kalani 7 $75,580.41 Democrat
Baker, Rosalyn 6 $71,534.07 Democrat
Amato, Terez 6 $500.00 Democrat
Keith-Agaran, Gilbert 5 $104,978.87 Democrat
Inouye, Lorraine 4 $55,950.00 Democrat
Green, Josh 3 $82,300.00 Democrat
Ilagan, Greggor 2 $44,172.92 Democrat
Ruderman, Russell 2 $25,044.20 Democrat
Kahele, Kaialii 1 $151,559.00 Democrat
Kahele, Gilbert 1 $23,144.22 Democrat
Onishi, Dennis 1 $9,462.45 Democrat
Robinson, Kaloa 1 $11,520.09 Democrat

It is interesting to note how large is the variation on the total amount of contributions received by district in the table above for districts with more than one running candidate:

contributions.senate.sd <- contributions.senate.total[,.(SD=sd(Amount)),by=c("District")]
kable(contributions.senate.sd[!is.na(SD),.(District,SD=numeric_to_dollar(SD))])
District SD
25 $11,999.28
23 $3,425.93
21 $7,448.66
19 $26,235.88
14 $85,302.98
13 $48,587.01
10 $7,056.87
9 $77,764.29
8 $143,658.91
6 $50,228.67
2 $13,526.05
1 $68,689.66

The largest being on district 8 as noted above.

Candidates Who Won

The final step of this notebook is attempting to integrate the financial disclosure of the senate. The task is not trivial, as the information is not available as part of this table, but on a separate table with slight variations on the name. Let’s consider for example the list of all 2016 senators financial disclosures:

legislator.financial <- fread("data/Hawaii_State_Ethics_Commission_s_2016_Legislator_Financial_Disclosure.csv")

library(stringr)
format_district <- function(Title){
  return(as.integer(sapply(str_split(legislator.financial.senate[,Title]," "),"[[",3)))
}

legislator.financial.senate <- legislator.financial[`Dept/Board`=="Senate"]

legislator.financial.senate$District <- format_district(legislator.financial$Title)

#Unique since there can be one extra entry for ammendment
names <- legislator.financial.senate[Amended == 'false']
kable(names[order(-District)])
Filer View Title Dept/Board Date Filed Original Amended File Type File Year District
Thielen, Laura H. Form (http://files.hawaii.gov/ethics/disc/2016/FinLong_8580.pdf) Legislator, District 25 Senate 01/14/2016 true false Financial 2016 25
Tokuda, Jill Naomi Form (http://files.hawaii.gov/ethics/disc/2016/Kfx10Dis-11199.pdf) Legislator, District 24 Senate 01/29/2016 true false Financial 2016 24
Riviere, Gilbert R. Form (http://files.hawaii.gov/ethics/disc/2016/FinLong_8886.pdf) Legislator, District 23 Senate 01/31/2016 true false Financial 2016 23
Dela Cruz, Donovan Michael Form (http://files.hawaii.gov/ethics/disc/2016/FinLong_8696.pdf) Legislator, District 22 Senate 01/26/2016 true false Financial 2016 22
Shimabukuro, Maile S.L. Form (http://files.hawaii.gov/ethics/disc/2016/FinLong_8603.pdf) Legislator, District 21 Senate 01/19/2016 true false Financial 2016 21
Gabbard, Gerald Michael Form (http://files.hawaii.gov/ethics/disc/2016/FinLong_8651.pdf) Legislator, District 20 Senate 01/25/2016 true false Financial 2016 20
Espero, William Calip Form (http://files.hawaii.gov/ethics/disc/2016/FinLong_8784.pdf) Legislator, District 19 Senate 01/28/2016 true false Financial 2016 19
Kidani, Michelle N. Form (http://files.hawaii.gov/ethics/disc/2016/FinLong_8932.pdf) Legislator, District 18 Senate 02/01/2016 true false Financial 2016 18
Nishihara, Clarence K. Form (http://files.hawaii.gov/ethics/disc/2016/FinLong_8484.pdf) Legislator, District 17 Senate 01/06/2016 true false Financial 2016 17
Harimoto, Breene Y. Form (http://files.hawaii.gov/ethics/disc/2016/FinLong_8878.pdf) Legislator, District 16 Senate 01/31/2016 true false Financial 2016 16
Wakai, Glenn Satoru Form (http://files.hawaii.gov/ethics/disc/2016/FinLong_8944.pdf) Legislator, District 15 Senate 02/01/2016 true false Financial 2016 15
Wakai, Glenn Satoru Form (http://files.hawaii.gov/ethics/disc/2016/FinShort_11426.pdf) Legislator, District 15 Senate 08/01/2016 true false Financial 2016 15
Kim, Donna Mercado Form (http://files.hawaii.gov/ethics/disc/2016/Kfx10Dis-11081.pdf) Legislator, District 14 Senate 01/27/2016 true false Financial 2016 14
Galuteria, Brickwood M. Form (http://files.hawaii.gov/ethics/disc/2016/Kfx10Dis-11208.pdf) Legislator, District 12 Senate 01/30/2016 true false Financial 2016 12
Taniguchi, Brian T. Form (http://files.hawaii.gov/ethics/disc/2016/FinLong_8642.pdf) Legislator, District 11 Senate 01/23/2016 true false Financial 2016 11
Ihara, Les S. Form (http://files.hawaii.gov/ethics/disc/2016/FinLong_8885.pdf) Legislator, District 10 Senate 01/31/2016 true false Financial 2016 10
Kouchi, Ronald D. Form (http://files.hawaii.gov/ethics/disc/2016/FinLong_8938.pdf) Legislator, District 8 Senate 02/01/2016 true false Financial 2016 8
English, J. Kalani Form (http://files.hawaii.gov/ethics/disc/2016/Kfx10Dis-11198.pdf) Legislator, District 7 Senate 01/29/2016 true false Financial 2016 7
Baker, Rosalyn H. Form (http://files.hawaii.gov/ethics/disc/2016/FinLong_8863.pdf) Legislator, District 6 Senate 01/29/2016 true false Financial 2016 6
Keith-Agaran, Gilbert S.C. Form (http://files.hawaii.gov/ethics/disc/2016/Kfx10Dis-11112.pdf) Legislator, District 5 Senate 01/27/2016 true false Financial 2016 5
Inouye, Lorraine Rodero Form (http://files.hawaii.gov/ethics/disc/2016/FinLong_8800.pdf) Legislator, District 4 Senate 01/29/2016 true false Financial 2016 4
Green, Joshua B. Form (http://files.hawaii.gov/ethics/disc/2016/Kfx10Dis-10975.pdf) Legislator, District 3 Senate 01/11/2016 true false Financial 2016 3
Ruderman, Russell E. Form (http://files.hawaii.gov/ethics/disc/2016/FinLong_8458.pdf) Legislator, District 2 Senate 01/03/2016 true false Financial 2016 2
Kahele, Kaialii Form (http://files.hawaii.gov/ethics/disc/2016/Kfx10Dis-11734.pdf) Legislator, District 1 Senate 03/31/2016 true false Financial 2016 1
Kahele, Kaialii Form (http://files.hawaii.gov/ethics/disc/2016/FinShort_11350.pdf) Legislator, District 1 Senate 07/20/2016 true false Financial 2016 1
Last Name Linkage

The names, unfortunately, do not match exactly, as shown below. An alternative to this is using just the last name for comparison:

contributions.senate.total$District <- as.integer(contributions.senate.total$District) 

get.lastname <- function(name){
  sapply(strsplit(name,","),"[[",1)
}
get.firstname <- function(name){
  sapply(strsplit(name,","),"[[",2)
}
contributions.senate.total$lname <- get.lastname(contributions.senate.total[,`Candidate Name`])
names$lname <- get.lastname(names[,Filer])

financial.ties.senate <- merge(contributions.senate.total,names,by = c("District","lname"))[,.(`Candidate Name`,Filer,District,Party)][order(-District)]
kable(financial.ties.senate)
Candidate Name Filer District Party
Thielen, Laura Thielen, Laura H. 25 Democrat
Tokuda, Jill Tokuda, Jill Naomi 24 Democrat
Riviere, Gil Riviere, Gilbert R. 23 Democrat
Dela Cruz, Donovan Dela Cruz, Donovan Michael 22 Democrat
Shimabukuro, Maile Shimabukuro, Maile S.L. 21 Democrat
Gabbard, Mike Gabbard, Gerald Michael 20 Democrat
Espero, William Espero, William Calip 19 Democrat
Kidani, Michelle Kidani, Michelle N. 18 Democrat
Nishihara, Clarence Nishihara, Clarence K. 17 Democrat
Harimoto, Breene Harimoto, Breene Y. 16 Democrat
Wakai, Glenn Wakai, Glenn Satoru 15 Democrat
Wakai, Glenn Wakai, Glenn Satoru 15 Democrat
Kim, Donna Kim, Donna Mercado 14 Democrat
Galuteria, Brickwood Galuteria, Brickwood M. 12 Democrat
Taniguchi, Brian Taniguchi, Brian T. 11 Democrat
Ihara, Les Ihara, Les S. 10 Democrat
Kouchi, Ron Kouchi, Ronald D. 8 Democrat
English, Kalani English, J. Kalani 7 Democrat
Baker, Rosalyn Baker, Rosalyn H. 6 Democrat
Keith-Agaran, Gilbert Keith-Agaran, Gilbert S.C. 5 Democrat
Inouye, Lorraine Inouye, Lorraine Rodero 4 Democrat
Green, Josh Green, Joshua B. 3 Democrat
Ruderman, Russell Ruderman, Russell E. 2 Democrat
Kahele, Kaialii Kahele, Kaialii 1 Democrat
Kahele, Kaialii Kahele, Kaialii 1 Democrat
Kahele, Gilbert Kahele, Kaialii 1 Democrat
Kahele, Gilbert Kahele, Kaialii 1 Democrat

At first, we may be led to conclude this approach would suffice, but at the very bottom, we can see that Kahele Kaialii and Gilbert share the same last name. The first name, in turn, is not always exactly the same from both tables as in district 1, so while an exact match would work for first name here, it wouldn’t always work. For instance, for Gabbard of District 20, in case another candidate shared his last name, a exact match of first name would not work. Now what?

First Name Linkage

We need to also include the first name into account, but rather than an exact match, we need to calculate what is the most similar name when more than one last name matches a candidate running for the same office (here exemplified by senate), and district. In other words, we need to make this comparison less strict, having it a similarity score rather than YES/NO match. This similarity can be calculaded, for example, using the levenshtein distance.

Let’s first consider what the levenshtein calculates in terms of the similarity for the table above:

library(RecordLinkage)
percent <- function(x, digits = 2, format = "f", ...) {
  paste0(formatC(100 * x, format = format, digits = digits, ...), "%")
}

financial.ties.senate$candidatefname <- get.firstname(financial.ties.senate[,`Candidate Name`])
financial.ties.senate$filerfname <- get.firstname(financial.ties.senate[,Filer])

#financial.ties.senate[,fnamesin=.(levenshteinSim(candidatefname,filerfname))]

financial.ties.senate$fnamesim <- levenshteinSim(financial.ties.senate$candidatefname,financial.ties.senate$filerfname)

kable(financial.ties.senate[,.(`Candidate Name`,Filer,District,Party,`Candidate First Name`=candidatefname,`Filer First Name`=filerfname,Similarity=percent(fnamesim))])
Candidate Name Filer District Party Candidate First Name Filer First Name Similarity
Thielen, Laura Thielen, Laura H. 25 Democrat Laura Laura H. 66.67%
Tokuda, Jill Tokuda, Jill Naomi 24 Democrat Jill Jill Naomi 45.45%
Riviere, Gil Riviere, Gilbert R. 23 Democrat Gil Gilbert R. 36.36%
Dela Cruz, Donovan Dela Cruz, Donovan Michael 22 Democrat Donovan Donovan Michael 50.00%
Shimabukuro, Maile Shimabukuro, Maile S.L. 21 Democrat Maile Maile S.L. 54.55%
Gabbard, Mike Gabbard, Gerald Michael 20 Democrat Mike Gerald Michael 26.67%
Espero, William Espero, William Calip 19 Democrat William William Calip 57.14%
Kidani, Michelle Kidani, Michelle N. 18 Democrat Michelle Michelle N. 75.00%
Nishihara, Clarence Nishihara, Clarence K. 17 Democrat Clarence Clarence K. 75.00%
Harimoto, Breene Harimoto, Breene Y. 16 Democrat Breene Breene Y. 70.00%
Wakai, Glenn Wakai, Glenn Satoru 15 Democrat Glenn Glenn Satoru 46.15%
Wakai, Glenn Wakai, Glenn Satoru 15 Democrat Glenn Glenn Satoru 46.15%
Kim, Donna Kim, Donna Mercado 14 Democrat Donna Donna Mercado 42.86%
Galuteria, Brickwood Galuteria, Brickwood M. 12 Democrat Brickwood Brickwood M. 76.92%
Taniguchi, Brian Taniguchi, Brian T. 11 Democrat Brian Brian T. 66.67%
Ihara, Les Ihara, Les S. 10 Democrat Les Les S. 57.14%
Kouchi, Ron Kouchi, Ronald D. 8 Democrat Ron Ronald D. 40.00%
English, Kalani English, J. Kalani 7 Democrat Kalani J. Kalani 70.00%
Baker, Rosalyn Baker, Rosalyn H. 6 Democrat Rosalyn Rosalyn H. 72.73%
Keith-Agaran, Gilbert Keith-Agaran, Gilbert S.C. 5 Democrat Gilbert Gilbert S.C. 61.54%
Inouye, Lorraine Inouye, Lorraine Rodero 4 Democrat Lorraine Lorraine Rodero 56.25%
Green, Josh Green, Joshua B. 3 Democrat Josh Joshua B. 50.00%
Ruderman, Russell Ruderman, Russell E. 2 Democrat Russell Russell E. 72.73%
Kahele, Kaialii Kahele, Kaialii 1 Democrat Kaialii Kaialii 100.00%
Kahele, Kaialii Kahele, Kaialii 1 Democrat Kaialii Kaialii 100.00%
Kahele, Gilbert Kahele, Kaialii 1 Democrat Gilbert Kaialii 12.50%
Kahele, Gilbert Kahele, Kaialii 1 Democrat Gilbert Kaialii 12.50%

All that is left, is to group by the districts, selecting the candidate-filer combination which yields the highest similarity over the first name:

financial.ties.senate <- financial.ties.senate[financial.ties.senate[, .I[which.max(fnamesim)],by=c('District')]$V1]

kable(financial.ties.senate[,.(`Candidate Name`,Filer,District,Party,`Candidate First Name`=candidatefname,`Filer First Name`=filerfname,Similarity=percent(fnamesim))])
Candidate Name Filer District Party Candidate First Name Filer First Name Similarity
Thielen, Laura Thielen, Laura H. 25 Democrat Laura Laura H. 66.67%
Tokuda, Jill Tokuda, Jill Naomi 24 Democrat Jill Jill Naomi 45.45%
Riviere, Gil Riviere, Gilbert R. 23 Democrat Gil Gilbert R. 36.36%
Dela Cruz, Donovan Dela Cruz, Donovan Michael 22 Democrat Donovan Donovan Michael 50.00%
Shimabukuro, Maile Shimabukuro, Maile S.L. 21 Democrat Maile Maile S.L. 54.55%
Gabbard, Mike Gabbard, Gerald Michael 20 Democrat Mike Gerald Michael 26.67%
Espero, William Espero, William Calip 19 Democrat William William Calip 57.14%
Kidani, Michelle Kidani, Michelle N. 18 Democrat Michelle Michelle N. 75.00%
Nishihara, Clarence Nishihara, Clarence K. 17 Democrat Clarence Clarence K. 75.00%
Harimoto, Breene Harimoto, Breene Y. 16 Democrat Breene Breene Y. 70.00%
Wakai, Glenn Wakai, Glenn Satoru 15 Democrat Glenn Glenn Satoru 46.15%
Kim, Donna Kim, Donna Mercado 14 Democrat Donna Donna Mercado 42.86%
Galuteria, Brickwood Galuteria, Brickwood M. 12 Democrat Brickwood Brickwood M. 76.92%
Taniguchi, Brian Taniguchi, Brian T. 11 Democrat Brian Brian T. 66.67%
Ihara, Les Ihara, Les S. 10 Democrat Les Les S. 57.14%
Kouchi, Ron Kouchi, Ronald D. 8 Democrat Ron Ronald D. 40.00%
English, Kalani English, J. Kalani 7 Democrat Kalani J. Kalani 70.00%
Baker, Rosalyn Baker, Rosalyn H. 6 Democrat Rosalyn Rosalyn H. 72.73%
Keith-Agaran, Gilbert Keith-Agaran, Gilbert S.C. 5 Democrat Gilbert Gilbert S.C. 61.54%
Inouye, Lorraine Inouye, Lorraine Rodero 4 Democrat Lorraine Lorraine Rodero 56.25%
Green, Josh Green, Joshua B. 3 Democrat Josh Joshua B. 50.00%
Ruderman, Russell Ruderman, Russell E. 2 Democrat Russell Russell E. 72.73%
Kahele, Kaialii Kahele, Kaialii 1 Democrat Kaialii Kaialii 100.00%

Candidate Senates who Lost

Notice this table serves only for linkage of the Campaign Contributions for 2016 of Senates who won, as those were the ones that filed. What what the ones who lost?

Now that we have a table that gives us the name of the winners, we can simple “subtract” the winners from all candidate senators table, which will result on the remaining running senate candidates.

candidates.senate.lost <- merge(contributions.senate.total,financial.ties.senate,by='Candidate Name',all.x=TRUE)[is.na(Filer)]
kable(candidates.senate.lost[order(-District.x),.(`Candidate Name`,Party=Party.x,District=District.x)])
Candidate Name Party District
Nagamine, Robert Republican 25
Fale, Richard Republican 23
Ku, Tercia Republican 21
Fevella, Kurt Republican 19
Fidelibus, Christopher Republican 19
Campagna, Carl Democrat 14
Chun Oakland, Suzanne Democrat 13
Iwamoto, Kim Coco Democrat 13
Nakoa, Keone Democrat 13
Ozols, Harry Libertarian 13
Rhoads, Karl Democrat 13
Tam, Rodney Republican 13
Farrell, David Democrat 10
Phillips, Arnold Libertarian 10
Chang, Stanley Democrat 9
Slom, Sam Republican 9
Ahuna, Kanoe Democrat 8
Amato, Terez Democrat 6
Ilagan, Greggor Democrat 2
Kahele, Gilbert Democrat 1
Onishi, Dennis Democrat 1
Robinson, Kaloa Democrat 1