如何使用存储在变量中的名称创建数据框时命名列?

时间:2012-10-09 13:51:19

标签: r dataframe

尝试创建这样的data.frame:

a = "foo"
bar = data.frame(a = 1:3)

但该列的名称为a,而不是foo

> bar
  a
1 1
2 2
3 3

创建data.frame后可以重命名该列,但是如何通过同一个data.frame命令中的变量轻松分配它的名称?

4 个答案:

答案 0 :(得分:9)

setNames()函数应该适合您:

a <- "Numbers"
b <- "Letters"

bar <- setNames(data.frame(1:3, letters[1:3]), c(a, b))
bar
#   Numbers Letters
# 1       1       a
# 2       2       b
# 3       3       c

答案 1 :(得分:5)

由于R解释你提供的参数名称的方式,我认为你不能做你想做的事。实际上,您希望get(a) = 1:3希望R将存储为a的对象的值而不是标签a本身,但此处不允许使用该习惯用法。

我会这样做:

> a <- "foo"
> bar <- data.frame(1:3)
> names(bar) <- a
> 
> bar
  foo
1   1
2   2
3   3

答案 2 :(得分:2)

尝试:

a = structure(data.frame(1:3), names="foo")
> a
foo
1   1
2   2
3   3

答案 3 :(得分:0)

使用链接轻微修改Daniel Gerlanc's answer

a <- "foo"
a <- data.frame(1:3) %>% structure(names = c(a))

  foo
1   1
2   2
3   3

当您从其他数据类型创建数据框时,链接非常有用,例如动物园系列

a <- c("foo","data")
bar
2016-01-01 2016-01-02 2016-01-03 2016-01-04 2016-01-05 
      0.78       0.46       0.82       1.07       1.04


a <- bar %>% as.data.frame() %>% tibble::rownames_to_column() %>% structure(names=a)

          foo data
1  2016-01-01 0.78
2  2016-01-02 0.46
3  2016-01-03 0.82
4  2016-01-04 1.07
5  2016-01-05 1.04