代码之家  ›  专栏  ›  技术社区  ›  colorlace

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

  •  41
  • colorlace  · 技术社区  · 7 年前

    我有一个列名称向量,叫做 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)

    6 回复  |  直到 7 年前
        1
  •  37
  •   Daniel    3 年前
    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 所以这个问题解释了如何使用其他R库来实现它。

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

        2
  •  29
  •   Tony416    7 年前

    因为你想合并一个藏书列表。只需将NULL赋给变量,然后 bind_rows 与其他藏品。

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

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

    bind_rows(tibbleList) # combine all tibbles in the list
    
        3
  •  20
  •   Nik    4 年前

    对于那些仍然对用字符向量给出的列名创建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()

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

        4
  •  4
  •   Marek    4 年前

    你可以虐待 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
    
        5
  •  1
  •   Daniël    3 年前

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

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

    .name\u repair允许您在同一函数中命名列。

        6
  •  0
  •   R Moore    3 年前

    以下命令将创建一个包含0行和变量(列)的TIBLE,变量(列)的名称为tbl\u colnames

    tbl<-tibble::tibble(!!!tbl\u colnames,.行=0)