用列名和 0 行初始化一个空的 tibble

Initialize an empty tibble with column names and 0 rows

我有一个名为 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)

因为您想合并一个 tibbles 列表。您可以将 NULL 分配给变量,然后将 bind_rows 与其他小标题一起分配。

res = NULL
for(i in tibbleList)
   res = bind_rows(res,i)

然而,一个更有效的方法是

bind_rows(tibbleList) # combine all tibbles in the list
my_tibble <- tibble(
  var_name_1 = numeric(),
  var_name_2 = numeric(),
  var_name_3 = numeric(),
  var_name_4 = numeric(),
  var_name_5 = numeric()
)

没试过,但我想如果不是启动长度为 0 的数字向量,而是用其他 类(例如,character())来启动它,它也会起作用。

This SO 问题解释了如何使用其他 R 库。

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

对于仍然对使用字符向量给出的列名称创建 0 行小标题的优雅方法感兴趣的任何人 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()

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

您可以滥用 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

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

as_tibble(matrix(nrow = 0, ncol = length(tbl_colnames)), .name_repair = ~ tbl_colnames)

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

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

的内容命名

tbl <- tibble::tibble(!!!tbl_colnames, .rows = 0)