2011-11-02 57 views
8

我有一個數據框叫data.df與各種列說col1,col2,col3 .... col15。數據框沒有特定的類屬性,但任何屬性都可能被用作類變量。我想如下使用的R變量稱爲目標指向被視爲類列號:傳遞一個字符串作爲數據框列名

target<-data.df$col3 

,然後使用該字段(目標)作爲輸入到數學習者如PART和J48(從包RWeka):

part<-PART(target~.,data=data.df,control=Weka_control(M=200,R=FALSE)) 
j48<-J48(target~.,data=data.df,control=Weka_control(M=200,R=FALSE)) 

這個想法是能夠改變'目標'只有一次在我的R代碼的開始。如何才能做到這一點?

+0

如果你想要做的只是能夠調用'col3'而不是'data.df $ col3',你可以執行'attach(data.df)'。但是,當你完成數據時,你應該小心使用'detach()'。如果您一次使用多個數據框,如果您有重複的變量名稱,則可能會造成混淆並容易出錯。 – 2011-11-02 10:24:58

+0

安託萬,我讀過使用attach()不是一個好習慣。你能否提供一個'內'的例子。我已經閱讀過,但在我目前對R –

+0

的瞭解方面沒有什麼意義。謝謝,這就是我所做的。 –

回答

6

如果你問在R中使用references,這是不可能的。

但是,如果你問的不明確給定的名字得到一個列,這是可能的[運營商,像這樣:

theNameOfColumnIwantToGetSummaryOf<-"col3" 
summary(data.df[,theNameOfColumnIwantToGetSummaryOf]) 

...或類似的:

myIndexOfTheColumnIwantToGetSummaryOf<-3 
summary(data.df[,sprintf("col%d",myIndexOfTheColumnIwantToGetSummaryOf)]) 
+0

多列的情況如何?我知道你可以用'df [,colName]'完成你所做的事情,但是如何混合/匹配數字和名字。例如:'df [,c(1,2,4)]'其中col 4具有名稱「colName」。如何做'df [,c(1,2,「colName」)]'?這將有助於我試圖編寫的循環。 – Hendy

+0

@ Hendy你不能混用姓名和號碼;但你可以綁定兩個下標('cbind(df [,c(1,2)],df [,c(「colName」)])的結果或者用'match'將名字轉換爲數字(比如'match (c(「colName」,「colName2」),names(df))'並將結果與​​數字索引混合。 – mbq

+0

@ Hendy無論如何,我有一種奇怪的感覺,你正在努力做你想要的東西,你不會問關於整個循環的Q嗎? – mbq

9

我有時會通過使用字符串來引用列來完成很多工作。它的工作原理是這樣的:

> df <- data.frame(numbers=seq(5)) 
> df 
    numbers 
1  1 
2  2 
3  3 
4  4 
5  5 
> df$numbers 
[1] 1 2 3 4 5 
> df[['numbers']] 
[1] 1 2 3 4 5 

然後,您可以有一個變量target是作爲一個字符串所需列的名稱。我不知道RWeka,但許多庫(如ggplot)可以爲列(例如參數aes_string而不是aes)提供字符串參考。

相關問題