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