首页 文章

R:引用数据框以将列名作为变量返回,而不是字符串(用于子集)

提问于
浏览
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返回一个字符串,子集是'smart',并在df中查找对象名称 . 这有什么好办法吗?我可以使用[而不是我觉得问题会是一样的 .

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
    

相关问题