Convert named vector to dataframe

40,417

Solution 1

Here's a very direct approach:

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

In this case, read.table will automatically take care of splitting your names(x) component (by default, by space, but other characters could be specified if necessary).

You can also set the name for x directly in cbind:

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

A more direct approach would be to use cSplit from my "splitstackshape" package, like this:

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

Solution 2

I'd do something like this:

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

Do mind that the data types are not correct yet, the first two columns are factor's.

Share:
40,417

Related videos on Youtube

luciano
Author by

luciano

Updated on September 03, 2020

Comments

  • luciano
    luciano about 2 years

    I have this named vector:

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

    What is the best way to convert x to this dataframe:

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

Related