Tyl*_*uth 74 r vector type-conversion dataframe
我有一个从xmlAttrs返回的命名字符向量,如下所示:
testVect <- structure(c("11.2.0.3.0", "12.89", "12.71"), .Names = c("db_version",
"elapsed_time", "cpu_time"))
Run Code Online (Sandbox Code Playgroud)
我想将其转换为如下所示的数据框:
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
Run Code Online (Sandbox Code Playgroud)
Mat*_*rde 68
这很简单data.frame(as.list(testVect))
.或者,如果您想为列提供合理的数据类型,data.frame(lapply(testVect, type.convert), stringsAsFactors=FALSE)
.
dnl*_*rky 49
来自@MatthewPlourde和@JackRyan的答案可以解决,但是如果你有一个很长的命名向量,那么拥有一行和多列的数据框会很烦人.如果您想要一个包含许多行的"key"列和"value"列,则以下任何一项都应该有效:
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
Run Code Online (Sandbox Code Playgroud)
Jac*_*yan 16
我要去试一下:
test.vector <- as.data.frame(t(testVect))
class(test.vector)
Run Code Online (Sandbox Code Playgroud)
我曾经使用这些答案中建议的函数(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
Run Code Online (Sandbox Code Playgroud)
由reprex 包(v0.3.0)于 2019-11-10 创建
如 tidyverse 中所示- 将命名向量转换为 data.frame/tibble 的首选方法
归档时间: |
|
查看次数: |
51541 次 |
最近记录: |