2017-03-28 3 views
0

Ich habe einen Datensatz, der dem folgenden Bild ähnelt. Insgesamt sind es über 1000 Beobachtungen. Ich möchte einen neuen Datenrahmen erstellen, der die einzelne Variable in 3 Variablen trennt. Jede Variable wird bei jeder Beobachtung durch ein "+" getrennt, so dass sie getrennt werden muss, indem sie als Faktor verwendet wird.Bearbeiten eines Datensatzes durch Trennen von Variablen

enter image description here

+0

https://i.stack.imgur.com/VIWzF.jpg –

+1

'umformen :: colsplit (colname, Split = "+" , Namen = c ("name1", "name2", "n ame3 "))' – Craig

+0

Mögliches Duplikat von [R: Wie spalte ich eine bestimmte Spalte anhand des Symbols in R?] (http://stackoverflow.com/questions/5610041/r-how-to-split-a-specific- spaltenbasiert-auf-symbol-in-r) – PereG

Antwort

2

Hier ist eine Lösung mit data.table:

library(data.table) 

# Data frame 
df <- data.frame(MovieId.Title.Genres = c("yyyy+xxxx+wwww", "zzzz+aaaa+aaaa")) 

# Data frame to data table. 
df <- data.table(df) 

# Split column into parts. 
df[, c("MovieId", "Title", "Genres") := tstrsplit(MovieId.Title.Genres, "\\+")] 

# Print data table 
df 
+0

Ich benutze Rstudio, ich bin mir nicht sicher, ob data.table hier verfügbar ist, aber ich kann nicht darauf zugreifen mit Bibliotheksfunktion –

+0

Sie können das Paket von CRAN mit 'installieren install.packages ("data.table") '. – 67342343

+0

Haben Sie es .. aber wie kann ich es auf den angegebenen Datenrahmen anwenden? –

1

Ich gehe davon aus, dass Ihr movieData Objekt ist eine einzelne Spalte data.frame Objekt.

Wenn Sie ein einzelnes Element aus dem Datensatz teilen möchten, verwenden Sie strsplit den Charakter mit + (die R will als "\\+" sehen geschrieben):

# split the first element of movieData into a vector of strings: 
strsplit(as.character(movieData[1,1]), "\\+") 

Verwenden lapply anzuwenden dies auf die gesamte Spalte , dann massieren Sie die resultierende Liste in eine schöne, verwendbar data.frame:

# convert to a list of vectors: 
step1 = lapply(movieData[,1], function(x) strsplit(as.character(x), "\\+")) 

# step1 is a list, so make it into a data.frame: 
step2 = as.data.frame(step1) 

# step2 is a nice data.frame, but its names are garbage. Fix it: 
movieDataWithColumns = setNames(step2, c("MovieId", "Title", "Genres")) 
+0

Das alles macht Sinn, außer ich bekomme einen Fehler, wenn ich es ausführe .. Es sagt mir, wenn es zu dem Teil kommt, der mit "step2" beginnt .....: Fehler in (Funktion (..., Zeile .names = NULL, check.rows = FALSE, check.names = TRUE,: Argumente bedeuten unterschiedliche Anzahl von Zeilen: 3, 2, 1 –

+0

Können Sie die Filmdaten in Ihrem Beispiel angeben? pasteable code mit 'dput (movieData)' – lebelinoz

+0

http://stat.slu.edu/~speegle/project1Files/movies.dat –

Verwandte Themen