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

时间:2018-02-16 19:44:27

标签: r tibble

我有一个名为tbl_colnames的列名矢量。

我想创建一个包含0行和length(tbl_colnames)列的tibble。

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

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

然后我想将列命名为......

colnames(tbl) <- tbl_colnames

我的问题:有更优雅的方式吗?

类似于tbl <- tibble(colnames=tbl_colnames)

4 个答案:

答案 0 :(得分:8)

因为你想组合一个字节列表。您可以将NULL分配给变量,然后将bind_rows与其他元素分配。

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

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

bind_rows(tibbleList) # combine all tibbles in the list

答案 1 :(得分:8)

对于仍然对以优雅的方式来创建零行标题(其字符名称由字符向量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()

这当然会导致每个列的逻辑类型。

答案 2 :(得分:2)

my_tibble <- tibble(
  var_name_1 = numeric(),
  var_name_2 = numeric(),
  var_name_3 = numeric(),
  var_name_4 = numeric(),
  var_name_5 = numeric()
)

还没有尝试过,但是我猜想,如果不使用其他类(例如character())来初始化长度为0的数字矢量,它也可以工作。

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

根据this tidyverse问题,这将不是小问题的功能。

答案 3 :(得分:1)

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