2013-11-22 56 views
0

我有一個包含顏色的數據集。我想選擇列8,9和10中顏色相同的記錄。如何使用R選擇具有類data.frame中的條件的記錄?

Column 8 Column 9 Column 10 
    red  blue yellow 
    green  green green 
    yellow yellow blue 

這是我到目前爲止?

 d1<-d[,8] # contains column 8 
    d2<-d[,9] 
    d3<-d[,10] 
    n<-191#number of rows in data set 
    i<-1#for iteration 
    for (i in 1:n){ 
     if((d1[i]==d2[i])& (d1[i]==d3[i]){ #checks if the colors match 
      dl<-c(d1[i],d2[i],d3[i])) 
      dl<-cat(dl, "\n") 
     i<-i+1} 
     else{ 
     i<-i+1 
    }} 

下面是一些輸出:

6 6 6 
2 2 2 
2 2 2 
6 6 6 
2 2 2 
4 4 4 
2 2 2 

我的問題是:1)我怎樣才能使輸出的顏色,而不是具有水平輸出? 2)當我嘗試打印變量dl時,我的輸出從之前顯示的變爲NULL。爲什麼是這樣?

+1

R不是C:'d [as.character(d [1,8])==作爲。字符(d [,9])&as.character(d [,8])== as.character(d [,10]),]'請注意,您的列是類型因子,這會使事情變得更加困難。 – Roland

回答

0

這裏一對夫婦的言論:

  • 由於所需的輸出是顏色,而不必水平,更好地在這裏使用的字符串,而不是因素。
  • 使用R矢量化==運算符如註釋中所述。
  • 使用命名列進行子列化比列索引更安全。

例如:

d[d[,'Column8']==d[,'Column9'] & d[,'Column8']==d[,'Column10'],] 
    Column8 Column9 Column10 
    2 green green green 

其中d定義爲:

d <- read.table(text=' Column8 Column9 Column10 
    red  blue yellow 
    green  green green 
    yellow yellow blue ',header=TRUE,stringsAsFactors=FALSE) 
相關問題