我经常使用 tidyverse
,面临的挑战是如何将已命名向量转换为以向量名称为列名的 data.frame
/tibble
。
有没有更加优选/适用于 tidyverse 的方法来做到这一点呢?
编辑:这与以下 GitHub 问题有关:此处和此处
所以,我想要:
require(tidyverse)
vec <- c("a" = 1, "b" = 2)
变成这样:
# A tibble: 1 × 2
a b
<dbl> <dbl>
1 1 2
我可以通过以下方式完成这个任务,例如:
vec %>% enframe %>% spread(name, value)
vec %>% t %>% as_tibble
使用案例示例:
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)
这给出了
# A tibble: 2 × 3
a b c
<chr> <chr> <chr>
1 1 2 <NA>
2 1 <NA> 3
bind_rows
不能代替map_df(~t(.) %>% as_tibble)
。所以,到目前为止,我会先转置,然后将其转换为一个数据框,使字符串保持字符形式(而不是因子),最后再将结果绑定在一起。然而,这个常见任务的快捷方式会很方便。 - lukeAbind_rows
已经更新,现在可以按照你想要的方式工作。 - markdly