2015-03-18 26 views
1

我想跨數據幀的列執行操作,其中輸出取決於兩個值之間的比較。在行或列操作中進行比較R

我的數據幀dat佈置是這樣的:

region value1 
a  0 
a  0 
a  6 
a  7 
a  3 
a  0 
a  4 
b  5 
b  1 
b  0 

我想創建基於在整數因子的值的矢量。每當區域值變化或每次value1爲0時,係數值都應該遞增。因此,在這種情況下,我想要的矢量將等於c(1, 2, 2, 2, 2, 3, 3, 4, 4, 5)

我有代碼,以使該遞增只有當value1爲0的一個因素向量:

fac <- as.factor(cumsum(dat[,2]==0)) 

,我有C風格的代碼,獲取大致我想要的載體,但非常緩慢運行在我的整體數據只是普通的醜:

p <- 1 
facint <- 1 
for (i in 2:length(dat[,2])) { 
    facint <- c(facint, p) 
    if (dat[i, 2]==0 || dat[i, 1] != dat[i-1, 1]) 
    p = p+1 
    } 

fac <- as.factor(facint) 

所以,我怎麼能在R-編程風格上的每一行操作時完成的操作,如本?

回答

1

嘗試

cumsum(dat[,2]==0|c(FALSE,dat$region[-1]!=dat$region[-nrow(dat)])) 
# [1] 1 2 2 2 2 3 3 4 4 5 

或者

cumsum(!duplicated(dat[,1]) | dat[,2]==0) 
#[1] 1 2 2 2 2 3 3 4 4 5 
+2

或'cumsum(與(DF,C(0L,DIFF(as.integer(地區))= 0L)|!(值== 0L )))'如果'region'是一個因素。 – 2015-03-18 20:58:16