2012-12-18 41 views
0

我有以下的數據幀:施加多於一個的條件的數據幀的不同列

id1 id2 qtty cat output 
15994 15994 30 1 1 
25787 26275 7 2 1 
122301 122301 0 0 0 
36199 35333 14 2 1 
36199 36199 15 1 1 
46223 45746 14 2 1 
46223 46223 15 1 1 
80570 80570 0 0 0 
55728 55728 1 1 1 
94218 94218 0 0 0 
69456 66837 5 2 1 

其中cat是我想按照下列標準,以產生列:

id1=id2 and qtty=0 then cat=0 
id1=id2 and qtty>0 then cat=1 
id1!=id2 and qtty=0 then cat=2 
id1!=id2 and qtty>0 then cat=2 

output就是我得到什麼,我所做的是:

status<-function(dataframe){ 
    store<-rep(0,length(dataframe[,1])) 
    for(i in 1: length(dataframe[,1])) { 
    if(dataframe[i,1]==dataframe[i,2]) { 
     if(dataframe[i,3]==0) {store[i]<-0} 
     else 
      if(dataframe[i,1]==dataframe[i,2]) { 
      if(dataframe[i,3]>0) {store[i]<-1} 
       else 
       if(dataframe[i,1]!=dataframe[i,2]) { 
        if(dataframe[i,3]>0) {store[i]<-2} 
        else store[i]<-2 
       } 
      } 
     } 
    } 
    return(store) 
} 

任何幫助將不勝感激。

+0

目前還不清楚你的問題是什麼。此外,請回顧以前的問題,並通過點擊複選標記標記接受的答案。 –

+1

謝謝,我已經得到了一個答案,這是有效的。乾杯。 (以前的回答:接受) – Rafael

回答

5

這可能與ifelse來完成:(假設dat是您的數據幀)

within(dat, cat <- ifelse(id1 != id2, 2, qtty > 0)) 

結果:

 id1 id2 qtty cat output 
1 15994 15994 30 1  1 
2 25787 26275 7 2  1 
3 122301 122301 0 0  0 
4 36199 35333 14 2  1 
5 36199 36199 15 1  1 
6 46223 45746 14 2  1 
7 46223 46223 15 1  1 
8 80570 80570 0 0  0 
9 55728 55728 1 1  1 
10 94218 94218 0 0  0 
11 69456 66837 5 2  1 

它是如何工作的:

功能ifelse檢查是否id1id2是相同的。如果是這種情況,則將值2分配給cat中的相應條目。如果它們不相同,則分配qtty > 0的結果。後者返回轉換爲整數(01)的布爾值(FALSETRUE)值的邏輯向量。

+0

非常感謝!太好了,解決方案只需寫一行。 – Rafael

相關問題