2014-11-05 185 views
3

索引位置我已經這樣的R - 與條件

w<-c(0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0) 

數據幀i想的索引位置值之後開始1.

output : NA,NA,NA,NA,NA,1,2,3,4,5,6,7,1,2,3,4,5,1,2,3,4,5,6,7,8,9 

理想地適用於一個數據幀。

由於

編輯:w是一個數據幀,

大致此功能

m<-as.data.frame(w) 
m[m!=1] <- row(m)[m!=1] 
m 
    w 
1 1 
2 2 
3 3 
4 4 
5 5 
6 1 
7 7 
8 8 
9 9 
10 10 
11 11 
12 12 
13 1 
14 14 
15 15 
16 16 
17 17 
18 1 
19 19 
20 20 
21 21 
22 22 
23 23 
24 24 
25 25 
26 26 

但具有返回爲1時的值1被匹配。

> m 
    w wanted 
1 1  NA 
2 2  NA 
3 3  NA 
4 4  NA 
5 5  NA 
6 1  1 
7 7  2 
8 8  3 
9 9  4 
10 10  5 
11 11  6 
12 12  7 
13 1  1 
14 14  2 
15 15  3 
16 16  4 
17 17  5 
18 1  1 
19 19  2 
20 20  3 
21 21  4 
22 22  5 
23 23  6 
24 24  7 
25 25  8 
26 26  9 

由於

回答

1

對於給定的數據,包括重複1的和非順序輸入,以下工作:

m[9,1] <- 100 
m[3,1] <- 55 
m[14,1] <- 60 
m[14,1] <- 60 
m[25,1] <- 1 
m[19,1] <- 1 

m$result <- 1:nrow(m) - which(m$w == 1)[cumsum(m$w == 1)] + 1 

但是,如果數據不能在1日開始:

m[1,1] <- 2 

那麼這作品:

firstone <- which(m$w == 1)[1] 
subindex <- m[firstone:nrow(m),'w'] == 1 
m$result <- c(rep(NA,firstone-1),1:length(subindex) - which(subindex)[cumsum(subindex)] + 1) 
+0

優秀!!!!! – user3355655 2014-11-06 06:02:10

+0

你能幫我把這個函數應用到數據框的每一列嗎? – user3355655 2014-11-06 06:10:46

+0

您需要使用其中一個應用功能。可能只適用於MARGIN = 2。 – ARobertson 2014-11-06 16:07:00

2

這假定該數據是在實施例中示出的方式排序。

m$wanted <- with(m, ave(w, cumsum(c(TRUE,diff(w) <0)), FUN=seq_along)) 
m$wanted 
#[1] 1 2 3 4 5 1 2 3 4 5 6 7 1 2 3 4 5 1 2 3 4 5 6 7 8 9 
+0

這不會使一個隱含的屁股關於數據的解釋?即w中的值在每個塊內有序增加,不知道這是否重要,但也許值得一提 – 2014-11-05 15:15:10

+0

@beginneR我想OP是在我發佈解決方案後更新數據集。 – akrun 2014-11-05 15:15:55

+0

可能的..但+1對於一個好的解決方案,如果這個假設是有效的 – 2014-11-05 15:16:45