RStudio Datentypen in R

Datentypen

Variablen in R können von unterschiedlichem Typ sein. Zum Beispiel müssen wir Zahlen von Zeichenketten und Tabellen von einfachen Zahlenlisten unterscheiden. Die Funktion class() hilft uns zu bestimmen, um welchen Objekttyp es sich handelt:

a <- 10
class(a)
# Ausgabe> [1] "numeric"

Um effizient in R arbeiten zu können, ist es wichtig, die verschiedenen Variablentypen zu kennen und zu wissen, was man mit ihnen machen kann. Um auf Daten aus den Spalten eines Datenrahmens zuzugreifen, verwenden wir das Dollarzeichen-Symbol $, das als Accessor bezeichnet wird.

Ein Vektor ist ein Objekt, das aus mehreren Einträgen besteht und ein numerischer Vektor, ein Zeichenvektor oder ein logischer Vektor sein kann.
Wir verwenden Anführungszeichen, um zwischen Variablennamen und Zeichenketten zu unterscheiden.

Faktoren sind nützlich für die Speicherung kategorischer Daten und sind speichereffizienter als die Speicherung von Zeichen.

Dataframes in R

Bis jetzt haben wir die Variablen nur als eine Zahl definiert. Dies ist für die Speicherung von Daten nicht sehr nützlich. Die gängigste Art, einen Datensatz in R zu speichern, ist ein Datenrahmen. Konzeptionell kann man sich einen Datenrahmen als eine Tabelle vorstellen, in der die Zeilen die Beobachtungen darstellen und die verschiedenen Variablen, die für jede Beobachtung gemeldet werden, die Spalten definieren. Datenrahmen sind besonders nützlich für Datensätze, da wir verschiedene Datentypen in einem Objekt kombinieren können.

Ein großer Teil der Herausforderungen bei der Datenanalyse beginnt mit Daten, die in einem Datenrahmen gespeichert sind. So haben wir beispielsweise die Daten für unser motivierendes Beispiel in einem Datenrahmen gespeichert. Sie können auf diesen Datensatz zugreifen, indem Sie die dslabs-Bibliothek laden und den Morddatensatz mit der Datenfunktion laden:

library(dslabs)
data(trump_tweets)

#mit der Funktion class() stellen wir fest, ob es sich tatsächlich um einen Dataframe handelt. 

class(trump_tweets)
#> [1] "data.frame"
#Die Ausgabe ergibt "data.frame". Damit wurde unsere Annahme bestätigt.

In dieser Anleitung picken wir uns den Datensatz trump_tweets aus dem Paket dslabs heraus.

Untersuchen eines Objekts

Ein Dataframe kann sehr komplex sein, weil zahlreiche Variablen mit unterschiedlichen Eigenschaften sich darin befinden können. Damit wir einen Dataframe schnell verstehen, gibt es die Funktion str(). Sie hilft uns, mehr über die Struktur eines Objekts herauszufinden:

str(trump_tweets)

#Das ist die Ausgabe:
#'data.frame':	20761 obs. of  8 variables:
# $ source                 : chr  "Twitter Web Client" "Twitter Web Client" "Twitter Web Client" "Twitter Web Client" ...
# $ id_str                 : chr  "6971079756" "6312794445" "6090839867" "5775731054" ...
# $ text                   : chr  "From Donald Trump: Wishing everyone a wonderful holiday & a happy, healthy, prosperous New Year. Let’s think li"| __truncated__ "Trump #International Tower in Chicago ranked 6th tallest building in world by Council on Tall Buildings & Urban "| __truncated__ "Wishing you and yours a very Happy and Bountiful #Thanksgiving!" "Donald Trump Partners with TV1 on New Reality Series Entitled, Omarosa's Ultimate Merger: http://tinyurl.com/yk5m3lc" ...
# $ created_at             : POSIXct, format: "2009-12-23 12:38:18" "2009-12-03 14:39:09" "2009-11-26 14:55:38" ...
# $ retweet_count          : int  28 33 13 5 7 4 2 4 1 22 ...
# $ in_reply_to_user_id_str: chr  NA NA NA NA ...
# $ favorite_count         : int  12 6 11 3 6 5 2 10 4 30 ...
# $ is_retweet             : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...

Wir sehen eine Übersicht der Variablen des Dataframes. Oben werden die Anzahl der Fälle (Zeilen) und die Anzahl der Variablen (Spalten) aufgelistet. Wir sehen, dass die Tabelle 20761 Zeilen (Messpunkte) und 8 Variablen aufweist. Wir können die ersten sechs Zeilen mit der Funktion head() anzeigen:

head(trump_tweets)
#              source     id_str
#1 Twitter Web Client 6971079756
#2 Twitter Web Client 6312794445
#3 Twitter Web Client 6090839867
#4 Twitter Web Client 5775731054
#5 Twitter Web Client 5364614040
#6 Twitter Web Client 5203117820
                                                                                                                                        text
#1       From Donald Trump: Wishing everyone a wonderful holiday & a happy, healthy, prosperous New Year. Let’s think like champions in 2010!
#2 Trump International Tower in Chicago ranked 6th tallest building in world by Council on Tall Buildings & Urban Habitat http://bit.ly/sqvQq
#3                                                                             Wishing you and yours a very Happy and Bountiful Thanksgiving!
#4                       Donald Trump Partners with TV1 on New Reality Series Entitled, Omarosa's Ultimate Merger: http://tinyurl.com/yk5m3lc
#5                         --Work has begun, ahead of schedule, to build the greatest golf course in history: Trump International – Scotland.
#6              --From Donald Trump: "Ivanka and Jared’s wedding was spectacular, and they make a beautiful couple. I’m a very proud father."
           created_at retweet_count in_reply_to_user_id_str favorite_count is_retweet
#1 2009-12-23 12:38:18            28                    <NA>             12      FALSE
#2 2009-12-03 14:39:09            33                    <NA>              6      FALSE
#3 2009-11-26 14:55:38            13                    <NA>             11      FALSE
#4 2009-11-16 16:06:10             5                    <NA>              3      FALSE
#5 2009-11-02 09:57:56             7                    <NA>              6      FALSE
#6 2009-10-27 10:31:48             4                    <NA>              5      FALSE

Die head() Funktion zeigt uns die ersten Zeilen in einem Datensatz für alle Variablen. Die obere Ansicht ist deshalb gekürzt. Wenn du einen neuen Datensatz erhälst, solltest du mit den vorgestellten Funktionen einen schnellen Überblick zum Dataframe einholen.

In unserem Beispiel ist ein Messpunkt (Case, Observation) eine gesendete Nachricht. Für jede gesendete Nachricht kennen wir die Quelle (Source), eine einzigartige ID Nummer (id_str) den Inhalt der Nachricht (text) und weitere Informationen.

Zugriff mit $

In unseren Analysen werden wir nicht nur auf den Dataframe als Ganzes, sondern auch direkt auf einzelne Variablen zugreifen müssen. Wenn wir einzelne Variablen bzw. Spalten aus unserem Datensatz verwenden möchten, nutzen wir den Zugriffsoperator $ auf die folgende Weise:

> trump_tweets$retweet_count
#   [1]    28    33    13     5     7     4     2     4     1    22     7     5     1     1     1    11    28    22     2     1     3
 # [22]     1    34     4     4     1    11    38     6     2     1     9     1    10     2     4     1    11    10     8     3     2
  #[43]   253   144   109   112   250    12    14    24    44    55    24    31    69    32    19    26    27    34    28    37    34
  #[64]    35    27    31    46    36    21    24    31    15   100    34    43    17    51    15    47    38    21    11    21    16
  #[85]    46    44    17    39   193    50    43    56    54     9    17     7     9     8    38    24    30    22    15    33    16
 #[106]    74     5     4     5    78    39    22    26    18    30    22    13    17    15    19    16    11     8     7     6     8
 #[127]    25    18     8    24    37    10    12    18     9    10    45     7    15    12    18   117    13    36     6     8    10
 #[148]    14    21    12    59    25    19  3257    66     8    49     9    10    10    13     8     3     8    19    12    46    13
 #[169]     9    45    13    23    23     7    25    16     7    16    12  3813    23    20   187   174  1234   470  1012   217    59
 #[190]   440   257    41   243   157   120   745    24     3   128   109   381   214   622   164   246    80   111   138   171   160
 #[211]    96    42    99    21 13689    27   200    78    10  3069    31    27   144    22   285   430   252    26    19   307   380
 #[232]   208    55   196   630    23    17   170   228    36    24    12    20   384    38    15   145    68   325    62   106    29
# Die Tabelle ist ab hier gekürzt.

Um zu sehen, welche Variablennamen in einem Datensatz vorhanden sind, können wir Funktion names() verwenden.

names(trump_tweets)
#[1] "source"                  "id_str"                  "text"                    "created_at"              "retweet_count"          
#[6] "in_reply_to_user_id_str" "favorite_count"          "is_retweet"  

Wichtig: R Studio ändern die Reihenfolgen der Einträge nicht. Wenn wir direkt auf eine Variable zugreifen, z. B. mit trump_tweets$created_at , bleibt die Reihenfolge der Zeilen unverändert. Das hat den Vorteil, dass wir Variablen manipulieren können und neu ordnen können, ohne das Chaos entsteht.

Vektoren: Ziffern, Zeichen und Logik

Das Objekt trump_tweets$retweet_count ist nicht eine Zahl, sondern eine Sammlung von mehreren Zahlen. Wir nennen diese Art von Objekten Vektoren. Eine einzelne Zahl ist technisch gesehen ein Vektor der Länge 1, aber im Allgemeinen verwenden wir den Begriff Vektoren, um Objekte mit mehreren Einträgen zu bezeichnen. Die Funktion length() gibt an, wie viele Einträge der Vektor hat:

retweet <- trump_tweets$retweet_count
length(retweet)
#> [1] 20761

Dieser besondere Vektor ist numerisch, da dieser ausschließlich Zahlen beinhaltet. Das überprüfen wir mit der Funktion class().

class(retweet)
#> [1] "numeric"

In einem numerischen Vektor muss jeder Eintrag eine Zahl sein.

Um Zeichenketten zu speichern, können Vektoren auch von der Klasse “character” sein. Zum Beispiel sind die Zustandsnamen Zeichen:

class(trump_tweets$source)
#> [1] "character"

Wie bei numerischen Vektoren müssen alle Einträge in einem Zeichenvektor ein Zeichen sein.

Eine weitere wichtige Art von Vektoren sind logische Vektoren. Diese müssen entweder TRUE oder FALSE sein.

x <- 100 == 2
x
#> [1] FALSE
class(x)
#> [1] "logical"

Hier ist das == ein relationaler Operator, der fragt, ob 100 gleich 2 ist. Wenn Sie in R nur ein Gleichheitszeichen = verwenden, weisen Sie tatsächlich eine Variable zu, aber wenn Sie zwei == verwenden, testen Sie auf Gleichheit.

Sie können die anderen relationalen Operatoren sehen, indem Sie eingeben:

?Comparison