【问题标题】:access data frame column using variable使用变量访问数据框列
【发布时间】:2013-11-01 16:16:04
【问题描述】:

考虑下面的代码

a = "col1"
b = "col2"
d = data.frame(a=c(1,2,3),b=c(4,5,6))

此代码生成以下数据帧

  a b
1 1 4
2 2 5
3 3 6

但是想要的数据框是

  col1 col2
1 1    4
2 2    5
3 3    6

此外,我希望能够执行类似d$a 的操作,然后从a = "col1" 开始获取d$col1

我如何告诉 R "a" 是一个变量而不是列名?

【问题讨论】:

  • 你不能这样使用$See here 了解有关原因的更多信息。但是,您可以通过d[ , a ] 来实现您想要的。
  • 试试这个代码。知道如何避免这个错误,或者这个错误是什么?列名 = "col1";值 = 5; d = data.frame(); d[,columnName] = 值;
  • 您有一个空数据框。里面没有变量“columnName”,所以不能调用或者赋值。
  • 那么我该如何解决这个问题以使其正常工作?我想从一个空的数据框开始
  • 我想你可以从d = data.frame(NA) 开始,尽管你的数据框中总是有一列NAs。我通常不会从空数据框开始。

标签: r dataframe


【解决方案1】:

创建数据框后,您需要使用?colnames。例如,您将拥有:

d = data.frame(a=c(1,2,3), b=c(4,5,6))
colnames(d) <- c("col1", "col2")

您还可以在创建数据框时命名变量。例如:

d = data.frame(col1=c(1,2,3), col2=c(4,5,6))

此外,如果您将列名存储在变量中,如

a <- "col1"

您不能使用$ 通过d$a 选择列。 R 将查找名称为a 的列。相反,您可以使用d[[a]]d[,a]

【讨论】:

  • 如果是data.framenames(d)&lt;- c("col1", "col2") 就可以了。
  • 这很好,@Metrics。事实上,我几乎从不使用names()colnames() 在我看来概念上更清晰。除了少输入 3 个字符之外,还有其他好处吗?
  • 你是对的@gung。如果你想要一致性,这也成立:)
  • @Metrics,什么意义上的一致性? list 没有colnames,但data.framelist 的一种类型。另一方面,data.frames 类似于矩形matrix,它具有colnamesrownames....叹息...
【解决方案2】:

你可以这样做

a = "col1"
b = "col2"
d = data.frame(a=c(1,2,3),b=c(4,5,6))

>d
  a b
1 1 4
2 2 5
3 3 6

#Renaming the columns
names(d) <- c(a,b)
> d
  col1 col2
1    1    4
2    2    5
3    3    6

#Calling by names
 d[,a]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2017-10-12
    • 2023-03-27
    • 2019-05-20
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    相关资源
    最近更新 更多