获取某列中的值发生变化的行号

问题描述 投票:0回答:1

我有这个数据框:

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)
)。

r dataframe search
1个回答
0
投票

你可以使用

diff
:

which(diff(c(0, dat$Var1)) != 0)
#> [1]  1  5  7 13 16
© www.soinside.com 2019 - 2024. All rights reserved.