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

tidyverse-将命名向量转换为data.frame/tibble的首选方法,r,dplyr,tidyr,purrr,tidyverse,R,Dplyr,Tidyr,Purrr,Tidyverse,大量使用tidyverse时,我经常面临将命名向量转换为数据帧/tibble的挑战,其中列是向量的名称。 做这件事的首选方法是什么? 编辑:这与:和github问题有关 所以我想: require(tidyverse) vec <- c("a" = 1, "b" = 2) 用例示例: require(tidyverse) require(rvest) txt <- c('<node a="1" b="2"></node>', '<no

大量使用
tidyverse
时,我经常面临将命名向量转换为
数据帧
/
tibble
的挑战,其中列是向量的名称。
做这件事的首选方法是什么?
编辑:这与:和github问题有关

所以我想:

require(tidyverse)
vec <- c("a" = 1, "b" = 2)
用例示例:

require(tidyverse)
require(rvest)
txt <- c('<node a="1" b="2"></node>',
         '<node a="1" c="3"></node>')

txt %>% map(read_xml) %>% map(xml_attrs) %>% map_df(~t(.) %>% as_tibble)
require(tidyverse)
要求(rvest)
txt%map(读取xml)%%>%map(xml属性)%%>%map df(~t(%)%%>%as_-tible)

# A tibble: 2 × 3
      a     b     c
  <chr> <chr> <chr>
1     1     2  <NA>
2     1  <NA>     3
#一个tible:2×3
a、b、c
1     1     2  
2     1       3

这对我很有用:
c(“a”=1,b”=2)%%>%t()%%>%tbl_df()
有趣的是,您可以对列表使用
as_tible()
方法在一次调用中完成此操作。请注意,这不是最佳做法,因为这不是导出的方法

tibble:::as_tibble.list(vec)

现在可以使用
bind_rows
(在
dplyr 0.7.0
中介绍)直接支持这一点:

library(tidyverse))
vec#A tibble:1 x 2
#>a b
#>    
#> 1     1     2
这段引语解释了这一变化:

bind_rows()
bind_cols()
现在接受向量。前者将它们视为行,后者视为列。行需要内部名称,如
c(col1=1,col2=2)
,而列需要外部名称:
col1=c(1,2)
。列表仍被视为数据帧,但可以使用
显式拼接,例如,
绑定行(!!!x)
(#1676)

通过此更改,它意味着用例示例中的以下行:

txt%%>%map(读取xml)%%>%map(xml属性)%%>%map\df(~t(%)%%>%as\u tible)

可以重写为

txt%%>%map(读取xml)%%>%map(xml属性)%%>%map(绑定行)

这也相当于

txt%%>%map(读取xml)%%>%map(xml属性)%%>%{bind\u rows(!!!)}

下面的示例演示了不同方法的等效性:

库(tidyverse)
图书馆(rvest)
txt%映射(xml\u属性)
#x、y和z是相同的
x%映射密度(~t(%)%%>%为可存储)
y%map\u df(绑定行)
z[1]正确
相同(y,z)
#>[1]是的
Z
#>#tibble:2 x 3
#>a、b、c
#>     
#> 1     1     2  
#> 2     1       3

惯用的方法是用
拼接向量tibble()
调用中的code>使命名向量元素成为列定义:

库(TIBLE)
vec#A tibble:1 x 2
#>a b
#>    
#> 1     1     2

由(v0.3.0)于2019-09-14创建的(

如果有的话,您认为您所做的工作有什么不足(?)我问自己同样的问题,因为
bind_rows
不起作用,而
map_df(~t(%)%%>%as_tible)
。因此,直到现在,我转置、转换到字符串保留字符(而不是因子)的数据帧,然后将结果绑定在一起。不过,为这项常见任务提供一个快捷方式可能很好。@lukeA,我认为
bind_rows
已经更新,现在可以按照您希望的方式工作了。我对设置内部名称和引用外部名称之间的区别感到有点困惑。请看我的问题:
# A tibble: 2 × 3
      a     b     c
  <chr> <chr> <chr>
1     1     2  <NA>
2     1  <NA>     3
tibble:::as_tibble.list(vec)