将命名字符向量转换为data.frame

时间:2013-05-29 14:03:06

标签: r dataframe vector type-conversion

我有一个从xmlAttrs返回的命名字符向量,如下所示:

testVect <- structure(c("11.2.0.3.0", "12.89", "12.71"), .Names = c("db_version", 
             "elapsed_time", "cpu_time"))

我想将其转换为如下所示的数据框:

testDF <- data.frame("db_version"="11.2.0.3.0","elapsed_time"=12.89,"cpu_time"=12.71)
head(testDF)
  db_version elapsed_time cpu_time
1 11.2.0.3.0        12.89    12.71

6 个答案:

答案 0 :(得分:59)

就像data.frame(as.list(testVect))一样简单。或者,如果您想为列提供合理的数据类型,data.frame(lapply(testVect, type.convert), stringsAsFactors=FALSE)

答案 1 :(得分:44)

来自@MatthewPlourde和@JackRyan的答案有效,但是如果你有一个很长的命名向量,那么拥有一行和多列的数据框会很烦人。如果你想要一个&#34;键&#34;列和&#34;值&#34;有许多行的列,以下任何一个都应该有效:

data.frame(keyName=names(testVect), value=testVect, row.names=NULL)

##        keyName      value
## 1   db_version 11.2.0.3.0
## 2 elapsed_time      12.89
## 3     cpu_time      12.71


## Suggested by @JWilliman
tibble::enframe(testVect)

## # A tibble: 3 x 2
##   name         value
##   <chr>        <chr>
## 1 db_version   11.2.0.3.0
## 2 elapsed_time 12.89
## 3 cpu_time     12.71


## Suggested by @Joe
stack(testVect)
##       values          ind
## 1 11.2.0.3.0   db_version
## 2      12.89 elapsed_time
## 3      12.71     cpu_time

答案 2 :(得分:15)

我准备采取这个措施​​:

test.vector <- as.data.frame(t(testVect))
class(test.vector)

答案 3 :(得分:1)

以下是使用 tibble 的示例:

named_vector_df = tibble(name = names(named_vector), value = named_vector)

答案 4 :(得分:0)

我曾经使用这些答案中建议的功能(as.listas_tibbletenframe等),但后来发现{{1 }}现在可以完全按照原始问题的要求进行操作。

dplyr::bind_rows

reprex package(v0.3.0)于2019-11-10创建

tidyverse - prefered way to turn a named vector into a data.frame/tibble

所示

答案 5 :(得分:0)

named vector %>% as_tibble(.,rownames="column name of row.names")