[英]Convert Named Character Vector to data.frame
我有一个从 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
它就像data.frame(as.list(testVect))
一样简单。 或者,如果您想要列的合理数据类型, data.frame(lapply(testVect, type.convert), stringsAsFactors=FALSE)
。
@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
我要试一试:
test.vector <- as.data.frame(t(testVect))
class(test.vector)
我曾经使用这些答案中建议的函数( 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 包(v0.3.0) 于 2019 年 11 月 10 日创建
named vector %>% as_tibble(.,rownames="column name of row.names")
这是使用tibble
的示例:
named_vector_df = tibble(name = names(named_vector), value = named_vector)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.