Writing Functions in R
Examples
Use the longesttest function to print the longest name in the NAME column of the 1980 election data.
longesttest <- function(x) {x[which.max(nchar(x))]}
Click to see solution
library(data.table)
myDF <- fread("/anvil/projects/tdm/data/election/itcont1980.txt", quote="")
names(myDF) <- c("CMTE_ID", "AMNDT_IND", "RPT_TP", "TRANSACTION_PGI", "IMAGE_NUM", "TRANSACTION_TP", "ENTITY_TP", "NAME", "CITY", "STATE", "ZIP_CODE", "EMPLOYER", "OCCUPATION", "TRANSACTION_DT", "TRANSACTION_AMT", "OTHER_ID", "TRAN_ID", "FILE_NUM", "MEMO_CD", "MEMO_TEXT", "SUB_ID")
longesttest <- function(x) {x[which.max(nchar(x))]}
longesttest(myDF$NAME)
'REPUBLICAN NATIONAL COMMITTEE - CONTRIBUTIONS (AKA REPUBLICAN NATIONAL FINANCE COMMITTEE'
Using the itcont1980.txt file, create your own function called mostpopulardate that finds the most popular date in a column of dates, as well as the number of times that date occurs. Use that function to find the most popular transaction date.
Click to see solution
library(data.table)
myDF <- fread("/anvil/projects/tdm/data/election/itcont1980.txt", quote="")
names(myDF) <- c("CMTE_ID", "AMNDT_IND", "RPT_TP", "TRANSACTION_PGI", "IMAGE_NUM", "TRANSACTION_TP", "ENTITY_TP", "NAME", "CITY", "STATE", "ZIP_CODE", "EMPLOYER", "OCCUPATION", "TRANSACTION_DT", "TRANSACTION_AMT", "OTHER_ID", "TRAN_ID", "FILE_NUM", "MEMO_CD", "MEMO_TEXT", "SUB_ID")
mostpopulardate = function(x) {tail(sort(table(x)), n=1)}
mostpopulardate(myDF$TRANSACTION_DT)
x
12311979
2562
Using the itcont1980.txt file, write a function called myindycities that takes a year as the input and uses tapply to make a table of length 10, containing the top 10 cities in Indiana according to the sum of the amount of donations (in dollars) given in each city.
Click to see solution
myindycities <- function(myyear) {
myDF <- fread(paste0("/anvil/projects/tdm/data/election/itcont", myyear, ".txt"), quote="", select = c(9, 10,15))
names(myDF) <- c("city", "state", "donation")
myDF <- myDF[myDF$state == "IN", ]
city_donations <- tapply(myDF$donation, myDF$city, sum)
sorted_cities <- sort(city_donations, decreasing = TRUE)
return(head(sorted_cities, 10))
}
myindycities(1980)
myindycities(1986)
myindycities(1992)
INDIANAPOLIS
753547
MUNCIE
159897
ELKHART
111385
EVANSVILLE
94605
FORT WAYNE
87115
CARMEL
85872
INDPLS
76396
FT WAYNE
70174
SOUTH BEND
68332
LAFAYETTE
49851
INDIANAPOLIS
995379
FORT WAYNE
149194
MUNCIE
100433
ELKHART
100350
EVANSVILLE
84815
SOUTH BEND
81841
CARMEL
75993
TERRE HAUTE
62361
ZIONSVILLE
50900
COLUMBUS
40400
INDIANAPOLIS
2583618
FORT WAYNE
524980
CARMEL
384683
EVANSVILLE
308566
SOUTH BEND
274397
MUNCIE
251164
ELKHART
196432
COLUMBUS
143096
BLOOMINGTON
121733
ZIONSVILLE
94370