Advertisement
karstenw

Historical surveys on German "Sonntagsfrage"

Sep 14th, 2013
408
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 1.64 KB | None | 0 0
  1. if(!require(datamart)) install.packages("datamart")
  2.  
  3. allensbach <- function(resource="sonntagsfrage") urldata3(
  4.     resource=resource,
  5.     template="http://www.ifd-allensbach.de/studien-und-berichte/sonntagsfrage/gesamt.html",
  6.     extract.fct=htmlParse,
  7.     transform.fct=function(x) {
  8.         nodes <- try(getNodeSet(x, '//tr[@class="odd" or @class="even"]'), silent=TRUE)
  9.        
  10.         if(inherits(nodes, "try-error")) return(data.frame())
  11.         if(length(nodes)==0) return(data.frame())
  12.         dat <- as.data.frame(t(sapply(nodes, function(n) c(
  13.             timestamp=xmlValue(n[[1]]),
  14.             afd=xmlValue(n[[3]]),
  15.             cducsu=xmlValue(n[[4]]),
  16.             spd=xmlValue(n[[5]]),
  17.             fdp=xmlValue(n[[6]]),
  18.             gruene=xmlValue(n[[7]]),
  19.             linke=xmlValue(n[[8]]),
  20.             piraten=xmlValue(n[[9]]),
  21.             sonstige=xmlValue(n[[10]])
  22.         ))), stringsAsFactors=FALSE)
  23.        
  24.         parse_number <- function(x) {
  25.             idx <- x=="--"
  26.             x[!idx] <- gsub(",", ".", x[!idx], fixed=TRUE)
  27.             x[idx] <- NA
  28.             return(as.numeric(x))
  29.         }
  30.        
  31.         dat <- transform(dat,
  32.             timestamp=strptime(strtail(timestamp, 10), "%d.%m.%Y"),
  33.             afd=parse_number(afd),
  34.             cducsu=parse_number(cducsu),
  35.             spd=parse_number(spd),
  36.             fdp=parse_number(fdp),
  37.             gruene=parse_number(gruene),
  38.             linke=parse_number(linke),
  39.             piraten=parse_number(piraten),
  40.             sonstige=parse_number(sonstige)
  41.         )
  42.        
  43.         return(dat)
  44.     }
  45. )
  46.  
  47. query(allensbach(), resource="sonntagsfrage")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement