R:使用来自矢量的列名创建空的小标题/数据框

时间:2019-10-17 11:40:18

标签: r dataframe tibble

我想创建一个空的数据框,其中的列名称来自字符向量。

例如,如果这是我的载体:

 vec <- letters[1:3]

我想创建一个空的数据框,如下所示:

 df <- tibble('a' = character(), 'b' = character(), 'c' = character())

但是,我想遍历向量中的项目以填充数据框名称,而不必手动指定每个名称。实际上,我的向量有40多个名称。

我尝试了以下方法,因为它们不起作用:

 df <- tibble(vec[1:3])
 df <- tibble(vec)
 df <- tibble(for (i in 1:3){
   vec[i]
 })

对此将提供任何帮助!

4 个答案:

答案 0 :(得分:1)

你可以

library(tibble)

tb <- as_tibble(matrix(nrow = 0, ncol = length(vec), dimnames = list(NULL, vec)))

tb
# A tibble: 0 x 3
# ... with 3 variables: a <lgl>, b <lgl>, c <lgl>

答案 1 :(得分:1)

您可以创建一个命名向量vec,其中第一个参数设置所需的列的类型。 rep("", 3)行说我想要三个字符列。然后第二个参数是列名的向量。

使用dplyr::bind_rows将此行转换为小标题。然后[0, ]选择零行,将其留空。

使用此方法,您可以轻松控制每一列的数据类型。

library(dplyr)

vec <- setNames(rep("", 3), letters[1:3])
bind_rows(vec)[0, ]

# A tibble: 0 x 3
# ... with 3 variables: a <chr>, b <chr>, c <chr>

如果转置命名向量,也可以使用as_tibble。我猜我使用bind_rows是因为我通常加载了dplyr但没有加载tibble

library(tibble)

vec <- setNames(rep("", 3), letters[1:3])
as_tibble(t(vec))[0, ]

# A tibble: 0 x 3
# ... with 3 variables: a <chr>, b <chr>, c <chr>

如果您知道所有列都是单一类型(例如字符),则可以执行以下操作。

vec <- letters[1:3]
df <- bind_rows(setNames(rep("", length(vec)), vec))[0, ]

答案 2 :(得分:1)

Adam解决方案的一种变体是创建适当类型的命名列表,例如,

n = length(vec)
tmpl = setNames(rep(list(character()), n), head(letters, n))

这反映了data.frame或tibble的基本结构-等长向量的命名列表。然后

as.data.frame(tmpl, stringsAsFactors = FALSE)
tibble::as_tibble(tmpl)

答案 3 :(得分:1)

亚当想法的另一个变种:

as_tibble(sapply(vec, function(x) character()))

# A tibble: 0 x 3
# ... with 3 variables: a <chr>, b <chr>, c <chr>