2017-12-12 14 views
2

Ich versuche, meinen Datenrahmen zu teilen, der 354 (a1-a354) Spalten hat. Beispiel:Mehrere Spalten gleichzeitig teilen in R

a1 a2 
1 aa aa 
2 bb bb 
3 cc cc 

Derzeit bin ich mit dem folgenden Code:

df1<- extract(df1,1, c("D","M"), "(.)(.)",convert=TRUE) 

Das perfekt funktioniert, wenn ich es auf einer Spalte zu einer Zeit (i dont care über Spaltennamen), aber als Ich habe 354 Spalten, ich versuche, es zu loopen. Bis jetzt habe ich versucht, eine Funktion zu machen, damit ich sie mit lapply benutzen kann. Ich habe auch for-Schleife versucht. Ich bekomme immer die Fehler: Datenquelle

Ich habe versucht, die folgenden ein Wörterbuch sein muss:

colseparator <- function(x) { 
df1<- extract(df1,x, c("D","M"), "(.)(.)",convert=TRUE) 
} 

Andere Sache, die ich versucht ist

for (x in c(7,9,11)){ 
     df1<- extract(df1,x, c("D","M"), "(.)(.)",convert=TRUE) 
    } 

Keiner meiner Methoden arbeiten, offensichtlich mache ich etwas falsch. Jede Hilfe wird sehr geschätzt.

Antwort

0

Es gibt einige Optionen. Eine Möglichkeit wäre es, die Reihen paste zusammen, erstellen Sie ein Trennzeichen gsub mit und lesen mit read.table/read.csv

read.table(text=gsub('(?<=[a-z])(?=[a-z])', ',', do.call(paste, df1), 
      perl = TRUE), header = FALSE, stringsAsFactors=FALSE, sep=',') 

Oder wir könnten geteilt mit strsplit um über den Spalten Looping und dann rbind

do.call(rbind, lapply(df1, function(x) do.call(rbind, strsplit(x, "(?<=.)", perl = TRUE)))) 
+0

Hallo Akrun! Vielen Dank für die Lösung wurde die erste Arbeit, aber jetzt hat es begonnen, mir die folgende Ausgabe: ** fett ** '\t V1 V2 V3 V4 1 AADDEE 2 BBEEFF 3 CCFFGG ' Es sollte sechs haben Spalten, aber es hat nur vier – GWhiz

+0

@GWhiz Es ist nicht klar aus den Kommentaren. Das Beispiel in der Post scheint in Kleinbuchstaben zu sein. Jetzt, in den Kommentaren hat es Großbuchstaben. Unklar. – akrun

+0

Hallo Akrun, ich habe den Code für meine Großbuchstaben geändert: 'splitcols <- read.table (text = gsub ('(? <= [AZ]) (? = [AZ])', ',', do.call (Paste, subsetgeno4), perl = TRUE), header = FALSE, stringsAsFactors = FALSE, sep = '') 'die mir die folgende Ausgabe gab
' V1 V2 V3 V4
1 AADDEE
2 BBEEFF
3 CCFFGG' – GWhiz

Verwandte Themen