104

I have a named character vector returned from xmlAttrs like this:

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

I would like to convert it to a data frame that looks like this:

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
4

6 回答 6

94

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

于 2013-05-29T14:09:59.367 回答
67

@MatthewPlourde 和 @JackRyan 的答案有效,但是如果您有一个长命名的向量,那么拥有一个包含一行和多列的数据框会很烦人。如果您希望有一个“键”列和一个包含多行的“值”列,则以下任何一项都应该有效:

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
于 2014-12-20T22:56:01.533 回答
20

我要试一试:

test.vector <- as.data.frame(t(testVect))
class(test.vector)
于 2013-05-29T14:10:31.947 回答
5

我曾经使用这些答案中建议的函数(as.list, as_tibble, t,enframe等),但后来发现dplyr::bind_rows现在可以通过单个函数调用完全完成原始问题的要求。

library(dplyr)
testVect <- structure(c("11.2.0.3.0", "12.89", "12.71"), .Names = c("db_version", "elapsed_time", "cpu_time"))
testVect %>% bind_rows
#> # A tibble: 1 x 3
#>   db_version elapsed_time cpu_time
#>   <chr>      <chr>        <chr>   
#> 1 11.2.0.3.0 12.89        12.71

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

tidyverse 所示 - 将命名向量转换为 data.frame/tibble 的首选方式

于 2019-11-10T06:33:14.623 回答
3
named vector %>% as_tibble(.,rownames="column name of row.names")
于 2020-10-31T08:43:49.740 回答
2

这是一个使用示例tibble

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

于 2021-02-21T23:20:31.097 回答