2013-10-16 65 views
3

有沒有辦法將數據框的列名作爲變量而不是字符串(在R中)引用?假設我想獲得數據幀df的第一列名稱。代碼colnames回報......R:參考數據框將列名稱作爲變量返回,而不是字符串(對於子集)

> 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內部查找對象名稱。有沒有解決這個問題的好方法?我可以使用[的,但我覺得問題會是一樣的。

回答

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 
+1

或者更好的'df [df [[2]]> 5,]'。 – Roland

相關問題