我有这个数据框:
dat <- data.frame(Var1 = c(1,1,1,1,2,2,3,3,3,3,3,3,4,4,4,5,5,5,5))
> dat
Var1
1 1
2 1
3 1
4 1
5 2
6 2
7 3
8 3
9 3
10 3
11 3
12 3
13 4
14 4
15 4
16 5
17 5
18 5
19 5
我想获取新值第一次出现的行号。
结果应该是:
c(1, 5, 7, 13, 16)
我已经用
unique(dat$Var1)
识别唯一值,并用 min(which(dat$Var1 == 1))
找到一个值的第一行,但我不知道如何在不使用循环的情况下将两者组合起来。
理想情况下,我正在寻找基础 R 中的解决方案,除非某些包中的解决方案是极其简单(例如
some.function(dat$Var1)
)。
你可以使用
diff
:
which(diff(c(0, dat$Var1)) != 0)
#> [1] 1 5 7 13 16