{"id":1574,"date":"2016-12-30T20:49:09","date_gmt":"2016-12-30T19:49:09","guid":{"rendered":"https:\/\/bob-team.de\/wordpress\/?p=1574"},"modified":"2017-06-07T15:59:37","modified_gmt":"2017-06-07T13:59:37","slug":"wiederholung-r-und-ablage-dataframe-auf-sql","status":"publish","type":"post","link":"https:\/\/bob-team.de\/wordpress\/2016\/12\/30\/wiederholung-r-und-ablage-dataframe-auf-sql\/","title":{"rendered":"Wiederholung R und Ablage Dataframe auf SQL"},"content":{"rendered":"<p>Folgendes Skript sammelt wiederholt ein paar Grundlagen und speichert am Ende die Daten per RODBC auf einem SQL-Server. Die Tabelle auf dem SQL-Server wird vorausgesetzt.<\/p>\n<pre lang=\"scilab\">rm(list=ls()) # alles l\u00f6schen\r\n\r\nsetwd(\"C:\/Entwicklung\/Projekte\/BurDocs\/r\/demo\/\")\r\n\r\nsource(\"..\/config.R\")\r\nsource(\"..\/utils.R\")\r\n\r\nlibrary(\"RODBC\", lib.loc=libpath)\r\n\r\n# ein Vektor vom Typ \"integer\"\r\n#    Zahlen: 12 bis 18\r\na=12:18\r\n\r\n# ein Vektor vom Typ \"double\"\r\nb=c(2,4,6,8)\r\n\r\n# ein Vektor vom Typ \"character\"\r\n#    Gro\u00dfbuchstaben: \"M\", \"A\", \"I\", \"K\"\r\nc=LETTERS[c(13,1,9,11)]\r\n\r\n# ein Data-Frame\r\n#    alle Spalten m\u00fcssen gleiche Anzahl Zeilen\r\ndf=data.frame(aaa=a[1:4],bbb=b,ccc=c)\r\n\r\n# Inhalte und Typen erkunden\r\ntypeof(a)\r\nlength(a)\r\nclass(b)\r\nnames(df)\r\nis.data.frame(df)\r\nis.factor(df$ccc)\r\nlevels(df$ccc)\r\nstr(df)\r\nstr(df$ccc)\r\nnrow(df)\r\nncol(df)\r\ndf[1]     # Werte von Spalte 1\r\ndf['aaa'] # entspricht df[1]\r\ndf[3,2]   # Wert von Reihe + Spalte\r\ndf[3,]    # alle Spalten der dritten Reihe\r\ndf$aaa\r\ndf$aaa[2] # vom Vektor der zweite Wert\r\n\r\ncolnames(df) <- c('aaa','b','ccc') # Spaltenname umbenennen\r\ncolnames(df)[2] = 'bbb'            # zweite Spalte umbenennen\r\nrownames(df)                       # Namen f\u00fcr die Zeilen\r\n\r\ndf <- cbind(df, \"ddd\"= 100-df$bbb)     # eine Spalte hinzuf\u00fcgen\r\ndf <- rbind(df, list(16, 10, 'M', 30)) # eine Zeile hinzuf\u00fcgen \r\n#    ...Spalte ddd muss Teil des Faktors sein (siehe unten)\r\n\r\ndf[order(df$ddd),]  # Tabelle sortieren\r\nsubset(df,df$bbb>4) # Tabelle filtern\r\n\r\n# Beispiel: die b-Werte der Reihen, die b > 4\r\n#    - einen logischen Vektor erstellen\r\n#    - den Vektor f\u00fcr eine Auswahl verwenden\r\n#    - nur die b-Werte anzeigen \r\nL = df$bbb > 4\r\ndf[L,]\r\ndf[L,]$bbb\r\n\r\n# Beispiel: Duplikate in Tabelle suchen\r\n#    - die Tabelle df verdoppeln, durch anh\u00e4ngen \r\n#    - f\u00fcr jede verdoppelte Zeile wird TRUE geliefert\r\n#    - mit which die Zeilennummern der Duplikate holen\r\n#    - mit dem ! die Ausgabe umkehren\r\n#    - mit unique die eindeutigen Zeilen filtern\r\n#    - dfdf dauerhaft l\u00f6schen\r\ndfdf <- rbind(df,df)\r\nduplicated(dfdf)\r\nwhich(duplicated(dfdf))\r\nwhich(!duplicated(dfdf))\r\nunique(dfdf)\r\nrm(dfdf)\r\n\r\n# Beispiel: Tabelle gruppieren\r\n#    - gruppiere die Spalte ccc\r\n#    - summiere die Spalte bbb\r\ntapply(df$bbb,df$ccc,sum)\r\n\r\n# Beispiel: neue Werte zum Faktor in Spalte ccc hinzuf\u00fcgen\r\n#    - Buchstabe \"a\" hinzuf\u00fcgen\r\n#    - Buchstaben \"ndres\" hinzuf\u00fcgen\r\ndf$ccc <- factor(df$ccc, levels = c(levels(df$ccc), 'a'))\r\nvalues = letters[c(14,4,18,5,19)]\r\ndf$ccc <- factor(df$ccc, levels = c(levels(df$ccc), values))\r\ndf <- rbind(df, list(18, 12, 'a', 60))\r\n\r\n# Beispiel: eine Zeile komplett l\u00f6schen\r\n#    - alle Zeilen mit \"M\" suchen\r\n#    - Zeilennamen von M-Zeilen holen\r\n#    - Zeilennamen in Nummern wandeln\r\n#    - nur 2-te Nummer verwenden\r\n#    - Ergebnis umkehren\r\n#    - Zeilen von Tabelle holen\r\ndf <- df[-as.numeric(rownames(df[df$ccc == 'M',]))[2],]\r\n\r\n# Beispiel: Tabelle auf SQL-Server speichern\r\nconn <- odbcConnect(\"MAIK_x64\")\r\nodbcClearError(conn)\r\nsqlSave(conn, df, \"demo_r\", \r\n        rownames=FALSE, safer=FALSE, append=FALSE)\r\nclose(conn)<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Folgendes Skript sammelt wiederholt ein paar Grundlagen und speichert am Ende die Daten per RODBC auf einem SQL-Server. Die Tabelle auf dem SQL-Server wird vorausgesetzt. rm(list=ls()) # alles l\u00f6schen setwd(&#8222;C:\/Entwicklung\/Projekte\/BurDocs\/r\/demo\/&#8220;) source(&#8222;..\/config.R&#8220;) source(&#8222;..\/utils.R&#8220;) library(&#8222;RODBC&#8220;, lib.loc=libpath) # ein Vektor vom Typ &#8222;integer&#8220; # Zahlen: 12 bis 18 a=12:18 # ein Vektor vom Typ &#8222;double&#8220; b=c(2,4,6,8) # ein [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[103],"class_list":["post-1574","post","type-post","status-publish","format-standard","hentry","category-skripte","tag-r","entry"],"_links":{"self":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts\/1574","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/comments?post=1574"}],"version-history":[{"count":4,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts\/1574\/revisions"}],"predecessor-version":[{"id":1935,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts\/1574\/revisions\/1935"}],"wp:attachment":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/media?parent=1574"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/categories?post=1574"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/tags?post=1574"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}