2016-07-24 5 views
-1

Ich habe ein df, die wie folgt aussieht:Text Spalte, nicht wiederholen Spaltenname

id name     grade 
1 rich, tom, todd,  12 
2 chris,mary   9 
3 larry    10 

I Text Spalte den folgenden Code zu spalten:

newdf <- within(df, name<-data.frame(do.call('rbind', strsplit(as.character(name), ',', fixed=TRUE)))) 

Und hier ist mein Ausgang:

id name.X1 name.X2 name.X3 grade 
1 rich  tom  todd  12 
2 chris  mary  chris  9 
3 larry  larry  larry  10 

Der Code I haben wird Namen Wiederholen (in id 2 & 3), in Zuschnitten oder NA zu setzen gegenüberliegen. Was würde ich den Code ausgeben möchte, ist folgendes:

id name.X1 name.X2 name.X3 grade 
    1  rich  tom  todd  12 
    2  chris  mary  N/A  9 
    3  larry  N/A  N/A  10 

Oder anstelle von N/A I für die Zellen möchten leer gelassen werden. Irgendeine Idee, wie ich vermeiden kann, dass es Namen wiederholt? Vielen Dank.

Antwort

2

Wir cSplit von splitstackshape

library(splitstackshape) 
cSplit(df, "name", ",") 
# id grade name_1 name_2 name_3 
#1: 1 12 rich tom todd 
#2: 2  9 chris mary  NA 
#3: 3 10 larry  NA  NA 

verwenden können, wenn wir strsplit verwenden, da die list Elemente ungleich lang sind, kann es mit NAS- oder sonst bekommen die Elemente wiederholt Pad besser sein. Zum Auffüllen mit NA am Ende ist eine Option, die length von jedem der list Element zu erhalten, die mit lengths getan werden kann, nehmen Sie die max ('MX') und die length auf 'MX' zuweisen. Dann erstellen wir einfach neue Spalten für 'df' basierend auf 'mx'.

lst <- strsplit(as.character(df$name), ",\\s*") 
mx <- max(lengths(lst)) 
df[paste0("name", seq(mx))] <- lapply(lst, `length<-`, mx) 
df[setdiff(names(df), "name")] 
# id grade name1 name2 name3 
#1 1 12 rich chris larry 
#2 2  9 tom mary <NA> 
#3 3 10 todd <NA> <NA> 
+0

@ZheyuanLi 'NAME_3: Faktor w/1-Ebene "todd": 1 NA NA' – akrun

+1

@ZheyuanLi Ja, weil die vorherigen Fall werden die Spalten als' factor' als Anfangs 'name' Spalte zurückgegeben, aber im 'strsplit' werden es' Charakter'-Spalten. – akrun

+0

@ZheyuanLi Ich denke, für die 'Faktor', die NA könnte' NA_integer_' – akrun

Verwandte Themen