2016-03-23 9 views
0

Hier ist, wie ich eine Spalte aufgeteilt:aus einer geteilten Spalte Zugriff

df <- data.frame('foo' = rep(c('ab','ac'), each = 5)) 
df <- within(df, boo <- data.frame(do.call('rbind', strsplit(as.character(df$foo),'',fixed=FALSE)))) 

Ausgang:

foo boo.X1 boo.X2 
1 ab  a  b 
2 ab  a  b 
3 ab  a  b 
4 ab  a  b 
5 ab  a  b 
6 ac  a  c 
7 ac  a  c 
8 ac  a  c 
9 ac  a  c 
10 ac  a  c 

aber wenn ich versuche, 'boo.X1' oder 'boo.X2' zugreifen Ich kann nicht. Wenn wir uns beispielsweise die Namen ansehen(), listet es nur die zwei Objekte foo und boo auf.

Vielleicht fehlt mir etwas offensichtlich, jede Hilfe wird geschätzt - danke.

Antwort

1

einen Blick auf die Struktur (str) von df Sie, dass boo itsself als data.frame sehen können.

> str(df) 
'data.frame': 10 obs. of 2 variables: 
$ foo: Factor w/ 2 levels "ab","ac": 1 1 1 1 1 2 2 2 2 2 
$ boo:'data.frame': 10 obs. of 2 variables: 
    ..$ X1: Factor w/ 1 level "a": 1 1 1 1 1 1 1 1 1 1 
    ..$ X2: Factor w/ 2 levels "b","c": 1 1 1 1 1 2 2 2 2 2 

So können Sie sie zugreifen, indem df$boo$X1 und df$boo$X1

, wenn Sie die boo Spalten anhängen möchten Sie cbind wie folgt verwendet werden:

df <- data.frame('foo' = rep(c('ab','ac'), each = 5)) 
df <- cbind(df, do.call('rbind', strsplit(as.character(df$foo),'',fixed=FALSE))) 
names(df) <- c("foo", "boo_1", "boo_2") 

, die Sie

gibt
foo boo_1 boo_2 
1 ab  a  b 
2 ab  a  b 
3 ab  a  b 
4 ab  a  b 
5 ab  a  b 
6 ac  a  c 
7 ac  a  c 
8 ac  a  c 
9 ac  a  c 
10 ac  a  c 
+0

Vielen Dank für Ihre Hilfe! –

+0

Sie könnten auch 'do.call (data.frame, df)' tun, wenn sie bereits Daten in dieser Struktur hatten. – A5C1D2H2I1M1N2O1R2T1

Verwandte Themen