我想创建一个空的数据框,其中的列名称来自字符向量。
例如,如果这是我的载体:
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]
})
对此将提供任何帮助!
答案 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>