Spalten teilen des gesamten dataframes

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
christin_56
Beiträge: 4
Registriert: Do Okt 05, 2017 1:42 pm

Spalten teilen des gesamten dataframes

Beitrag von christin_56 » Sa Okt 07, 2017 8:53 am

Guten Morgen!

Das ist ein AUsschnitt meines dataframes. Ich würde gerne jede Spalte in zwei Spalten teilen, also die Spaltenanzahl verdoppeln, jeder Buchstabe soll dann in einer Spalte stehen.

Versucht habe ich noch

Code: Alles auswählen

data_split<-for(i in 1:ncol(data))
{ strsplit(as.character(data[i,2], split="", TRUE))
}
Da kommt aber "data_split" als dataframe mit 0 Reihen und 0 Spalten raus, funktioniert also auch nicht...

Hat jemand eine gute Idee? Vielleicht funktioniert es mit der apply()-Funktion?

Ich würde mich über Tipps freuen :)
Zuletzt geändert von christin_56 am Di Okt 10, 2017 9:31 am, insgesamt 2-mal geändert.

jogo
Beiträge: 431
Registriert: Fr Okt 07, 2016 8:25 am

Re: Spalten teilen des gesamten dataframes

Beitrag von jogo » Sa Okt 07, 2017 11:01 am

Hallo Christin,

ich würde das so machen:

Code: Alles auswählen

set.seed(42)
x <- c("AA", "AB", "BB")
dat<- data.frame(V1=sample(x, 6, repl=TRUE), V2=sample(x, 6, repl=TRUE), 
                 V3=sample(x, 6, repl=TRUE), V4=sample(x, 6, repl=TRUE))
dat
matrix(sapply(dat, function(x) c(substr(x,1,1), substr(x,2,2))), nrow=nrow(dat))
Natürlich hättest Du auch apply(dat, 2, ...) anwenden können, aber (siehe Hilfetext von apply()) dann wird der Dataframe dat zuerst (intern) in eine Matrix umgewandelt.
Die Funktion sapply() arbeitet auf einer Liste. Ein Dataframe ist eine spezielle Liste, weshalb keine Umwandlung in eine Matrix erfolgen muss.

Gruß, Jörg

Benutzeravatar
EDi
Beiträge: 302
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Spalten teilen des gesamten dataframes

Beitrag von EDi » Sa Okt 07, 2017 9:15 pm

Ich hätte es so gemacht:

Code: Alles auswählen

as.data.frame(lapply(dat, function(y) unlist(strsplit(as.character(y), split = ""))))

library(microbenchmark)
microbenchmark(matrix(sapply(dat, function(x) c(substr(x,1,1), substr(x,2,2))), nrow=nrow(dat)),
               as.data.frame(lapply(dat, function(y) unlist(strsplit(as.character(y), split = "")))))

Ist aber langsamer als jörgs Lösung :(
Website
github

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild

christin_56
Beiträge: 4
Registriert: Do Okt 05, 2017 1:42 pm

Re: Spalten teilen des gesamten dataframes

Beitrag von christin_56 » Di Okt 10, 2017 9:32 am

Vielen Dank für Eure Hilfe! :)

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast