3

有没有办法将数据框的列名作为变量引用,而不是字符串(在 R 中)?假设我想获取数据框 df 的第一列名称。代码 colnames 返回...

> colnames(df)[[1]]
[1] "colname1" 

我问的原因是我很难将函数子集推广到任何数据帧。假设我希望在具有已知条件的数据帧上做一个条件子集,但我不知道运行时的列名(只是列号)。例子 -

> df<-data.frame( x=c(1:3), y=c(4:6))
> df.sub <- subset(df, df$y >5 )

但是可以说我在运行时不知道 df 的列名,只知道它的列号 2。函数调用

> df.sub <- subset(df, colnames(df)[[2]] >5 )

不起作用,因为 colnames 返回一个字符串,并且子集是“智能”并在 df 内部查找对象名称。有没有解决这个问题的好方法?我可以改用 [ ,但我觉得问题是一样的。

4

1 回答 1

4

您应该能够成功地为名称或索引号使用双方括号:

> subset(df, df[["y"]] > 5)
  x y
3 3 6
> subset(df, df[[2]] > 5)
  x y
3 3 6

但是,请注意帮助页面中的以下内容subset

警告

这是一个旨在以交互方式使用的便利功能。对于编程,最好使用像 [ 之类的标准子集函数,特别是参数子集的非标准评估可能会产生意想不到的后果。


而且,要给出一些不好的建议,您还可以使用get

> subset(df, get(colnames(df)[2]) > 5)
  x y
3 3 6

正如@Roland 在评论中指出的那样,大多数 R 用户实际上会使用以下内容:

> df[df[[2]] > 5, ]
  x y
3 3 6
于 2013-10-16T17:23:37.653 回答