2011-11-02 56 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)提供字符串参考。

相关问题