将命名向量转换为数据帧

时间:2013-06-10 09:15:23

标签: r vector dataframe

我有这个命名的矢量:

x <-  1:5

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

x转换为此数据框的最佳方式是什么:

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

3 个答案:

答案 0 :(得分:15)

这是一个非常直接的方法:

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

在这种情况下,read.table会自动处理拆分names(x)组件(默认情况下,按空格划分,但必要时可以指定其他字符)。

您还可以直接在x中设置cbind的名称:

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

更直接的方法是使用我的“splitstackshape”包中的cSplit,如下所示:

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

答案 1 :(得分:5)

我会做这样的事情:

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

请注意,数据类型还不正确,前两列是factor

答案 2 :(得分:0)

这是一个tidyverse解决方案,先使用enframe,然后使用separate

library(tidyverse)
enframe(x, name = "v12", value = "v3") %>% 
  separate(v12, into = c("v1", "v2"))