Convert Named Character Vector to data.frame

前端 未结 5 906
后悔当初
后悔当初 2020-11-30 00:06

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\"         


        
相关标签:
5条回答
  • 2020-11-30 00:37

    The answers from @MatthewPlourde and @JackRyan work, but if you have a long named vector it is annoying to have a data frame with one row and many columns. If you'd rather have a "key" column and a "value" column with many rows, any of the following should work:

    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
    
    0 讨论(0)
  • 2020-11-30 00:39

    I'm going to take a stab at this:

    test.vector <- as.data.frame(t(testVect))
    class(test.vector)
    
    0 讨论(0)
  • 2020-11-30 00:45
    named vector %>% as_tibble(.,rownames="column name of row.names")
    
    0 讨论(0)
  • 2020-11-30 00:48

    It's as simple as data.frame(as.list(testVect)). Or if you want sensible data types for your columns, data.frame(lapply(testVect, type.convert), stringsAsFactors=FALSE).

    0 讨论(0)
  • 2020-11-30 00:53

    I used to use the functions suggested in these answers (as.list, as_tibble, t, enframe, etc.) but have since found out that dplyr::bind_rows now works to do exactly what the original question asks with a single function call.

    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
    

    Created on 2019-11-10 by the reprex package (v0.3.0)

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

    0 讨论(0)
提交回复
热议问题