Wiederholung R und Ablage Dataframe auf SQL

  • Beitrags-Autor:
  • Beitrags-Kategorie:Skripte

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öschen
 
setwd("C:/Entwicklung/Projekte/BurDocs/r/demo/")
 
source("../config.R")
source("../utils.R")
 
library("RODBC", lib.loc=libpath)
 
# ein Vektor vom Typ "integer"
#    Zahlen: 12 bis 18
a=12:18
 
# ein Vektor vom Typ "double"
b=c(2,4,6,8)
 
# ein Vektor vom Typ "character"
#    Großbuchstaben: "M", "A", "I", "K"
c=LETTERS[c(13,1,9,11)]
 
# ein Data-Frame
#    alle Spalten müssen gleiche Anzahl Zeilen
df=data.frame(aaa=a[1:4],bbb=b,ccc=c)
 
# Inhalte und Typen erkunden
typeof(a)
length(a)
class(b)
names(df)
is.data.frame(df)
is.factor(df$ccc)
levels(df$ccc)
str(df)
str(df$ccc)
nrow(df)
ncol(df)
df[1]     # Werte von Spalte 1
df['aaa'] # entspricht df[1]
df[3,2]   # Wert von Reihe + Spalte
df[3,]    # alle Spalten der dritten Reihe
df$aaa
df$aaa[2] # vom Vektor der zweite Wert
 
colnames(df) <- c('aaa','b','ccc') # Spaltenname umbenennen
colnames(df)[2] = 'bbb'            # zweite Spalte umbenennen
rownames(df)                       # Namen für die Zeilen
 
df <- cbind(df, "ddd"= 100-df$bbb)     # eine Spalte hinzufügen
df <- rbind(df, list(16, 10, 'M', 30)) # eine Zeile hinzufügen 
#    ...Spalte ddd muss Teil des Faktors sein (siehe unten)
 
df[order(df$ddd),]  # Tabelle sortieren
subset(df,df$bbb>4) # Tabelle filtern
 
# Beispiel: die b-Werte der Reihen, die b > 4
#    - einen logischen Vektor erstellen
#    - den Vektor für eine Auswahl verwenden
#    - nur die b-Werte anzeigen 
L = df$bbb > 4
df[L,]
df[L,]$bbb
 
# Beispiel: Duplikate in Tabelle suchen
#    - die Tabelle df verdoppeln, durch anhängen 
#    - für jede verdoppelte Zeile wird TRUE geliefert
#    - mit which die Zeilennummern der Duplikate holen
#    - mit dem ! die Ausgabe umkehren
#    - mit unique die eindeutigen Zeilen filtern
#    - dfdf dauerhaft löschen
dfdf <- rbind(df,df)
duplicated(dfdf)
which(duplicated(dfdf))
which(!duplicated(dfdf))
unique(dfdf)
rm(dfdf)
 
# Beispiel: Tabelle gruppieren
#    - gruppiere die Spalte ccc
#    - summiere die Spalte bbb
tapply(df$bbb,df$ccc,sum)
 
# Beispiel: neue Werte zum Faktor in Spalte ccc hinzufügen
#    - Buchstabe "a" hinzufügen
#    - Buchstaben "ndres" hinzufügen
df$ccc <- factor(df$ccc, levels = c(levels(df$ccc), 'a'))
values = letters[c(14,4,18,5,19)]
df$ccc <- factor(df$ccc, levels = c(levels(df$ccc), values))
df <- rbind(df, list(18, 12, 'a', 60))
 
# Beispiel: eine Zeile komplett löschen
#    - alle Zeilen mit "M" suchen
#    - Zeilennamen von M-Zeilen holen
#    - Zeilennamen in Nummern wandeln
#    - nur 2-te Nummer verwenden
#    - Ergebnis umkehren
#    - Zeilen von Tabelle holen
df <- df[-as.numeric(rownames(df[df$ccc == 'M',]))[2],]
 
# Beispiel: Tabelle auf SQL-Server speichern
conn <- odbcConnect("MAIK_x64")
odbcClearError(conn)
sqlSave(conn, df, "demo_r", 
        rownames=FALSE, safer=FALSE, append=FALSE)
close(conn)