R - 具有条件的指数位置

时间:2014-11-05 14:59:39

标签: r indexing conditional-statements

我有一个像这样的数据框

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)

我想在值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

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)