2013-06-10 16 views
11

mam ten o nazwie Vector:Konwersja nazwie wektor do dataframe

x <- 1:5 

names(x) <- c('0 15', '1 15', '2 15', '0 16', '1 16') 

Jaki jest najlepszy sposób na konwersję x do tego dataframe:

xDF <- data.frame(V1 = c(0, 1, 2, 0, 1), V2 = c(15, 15, 15, 16, 16), V3 = 1:5) 

Odpowiedz

14

Oto bardzo bezpośrednie podejście:

cbind(read.table(text = names(x)), x) 
    V1 V2 x 
0 15 0 15 1 
1 15 1 15 2 
2 15 2 15 3 
0 16 0 16 4 
1 16 1 16 5 

W tym przypadku read.table automatycznie dbać o podzielenie swój składnik names(x) (domyślnie przez przestrzeń, ale inne znaki mogą być określona, ​​jeśli to konieczne).

Można również ustawić nazwę dla x bezpośrednio w cbind:

cbind(read.table(text = names(x)), V3 = x) 

bardziej bezpośrednie podejście byłoby użyć cSplit z mojego pakietu "splitstackshape", tak:

library(splitstackshape) 
cSplit(stack(x), "ind", " ") 
4

zrobiłbym coś takiego:

res = data.frame(cbind(do.call('rbind', strsplit(names(x), " ")), x)) 
res 
    V1 V2 x 
0 15 0 15 1 
1 15 1 15 2 
2 15 2 15 3 
0 16 0 16 4 
1 16 1 16 5 

Należy pamiętać, że typy danych nie są jeszcze poprawne, dwie pierwsze kolumny to factor.

Powiązane problemy