用列名和0行初始化一个空的小标题

tim*_*wiz 11 r tibble

我有一个名为的列名称向量tbl_colnames

我想用0行和length(tbl_colnames)列创建小标题。

我发现这样做的最好方法是...

tbl <- as_tibble(data.frame(matrix(nrow=0,ncol=length(tbl_colnames)))

然后我想命名这些列,以便...

colnames(tbl) <- tbl_colnames

我的问题:是否有更优雅的方法?

就像是 tbl <- tibble(colnames=tbl_colnames)

Dan*_*iel 28

my_tibble <- tibble(
  var_name_1 = numeric(),
  var_name_2 = numeric(),
  var_name_3 = numeric(),
  var_name_4 = numeric(),
  var_name_5 = numeric()
)
Run Code Online (Sandbox Code Playgroud)

还没有尝试过,但我想如果不是启动长度为 0 的数字向量,而是使用其他类(例如,字符()),它也可以工作。

这个SO question 解释了如何使用其他 R 库来做到这一点。

根据this tidyverse issue,这不会是tribbles的功能。


Nik*_*Nik 13

对于仍然对使用字符向量给出列名的优雅方式创建 0 行 tibble 感兴趣的任何人tbl_colnames

tbl_colnames %>% purrr::map_dfc(setNames, object = list(logical()))

或者:

tbl_colnames %>% purrr::map_dfc(~tibble::tibble(!!.x := logical()))

或者:

tbl_colnames %>% rlang::rep_named(list(logical())) %>% tibble::as_tibble()

当然,这会导致每一列都是逻辑类型。


小智 12

由于要合并小标题列表。您可以仅将NULL分配给变量,然后bind_rows再分配其他标记。

res = NULL
for(i in tibbleList)
   res = bind_rows(res,i)
Run Code Online (Sandbox Code Playgroud)

但是,一种有效的方法是

bind_rows(tibbleList) # combine all tibbles in the list
Run Code Online (Sandbox Code Playgroud)

  • 此答案是对仅与此页面上发布的标题和问题外围相关的评论的响应。 (5认同)

R M*_*ore 10

以下命令将创建一个包含 0 行和以 tbl_colnames 的内容命名的变量(列)的 tibble

tbl <- tibble::tibble(!!!tbl_colnames, .rows = 0, .name_repair = ~ tbl_colnames)
Run Code Online (Sandbox Code Playgroud)


小智 8

我来晚了一点,但对于未来的读者:

as_tibble(matrix(nrow = 0, ncol = length(tbl_colnames)), .name_repair = ~ tbl_colnames)
Run Code Online (Sandbox Code Playgroud)

.name_repair 允许您在同一函数中命名列。


Mar*_*rek 7

您可以滥用readr::read_csv,它允许从字符串中读取。您可以控制名称和类型,例如:

tbl_colnames <- c("one", "two", "three", "c4", "c5", "last")
read_csv("\n", col_names = tbl_colnames) # all character type
read_csv("\n", col_names = tbl_colnames, col_types = "lcniDT") # various types
Run Code Online (Sandbox Code Playgroud)