3

尝试像这样创建一个 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

4 回答 4

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
于 2012-10-09T14:50:18.110 回答
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
于 2012-10-09T13:59:19.667 回答
2

尝试:

a = structure(data.frame(1:3), names="foo")
> a
foo
1   1
2   2
3   3
于 2012-10-10T03:44:29.130 回答
0

使用链接对Daniel Gerlanc 的答案进行了轻微修改

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
于 2017-04-24T02:55:40.393 回答