R语言 用列名和0行初始化一个空tibble

yfwxisqw  于 2023-05-20  发布在  其他
关注(0)|答案(6)|浏览(280)

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

wrrgggsh

wrrgggsh1#

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的问题,这将不会是一个功能的tribbles。

42fyovps

42fyovps2#

既然你想合并一个tibles列表。您可以只将NULL赋给变量,然后将bind_rows赋给其他tibble。

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

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

bind_rows(tibbleList) # combine all tibbles in the list
jtoj6r0c

jtoj6r0c3#

对于任何仍然对创建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()
当然,这会导致每一列都是逻辑类型的。

q35jwt9p

q35jwt9p4#

下面的命令将创建一个行为0、变量(列)以tbl_colnames的内容命名的tibble

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

q8l4jmvw5#

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

gblwokeq6#

我有点迟到了,但对于未来的读者:

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

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

相关问题