我有一个简单的 data.frame
,如下所示。我想获取新 origin
开始的所有行索引。在这种情况下,它将是 1、5 和 8。有没有一种方法可以在不循环的情况下执行此操作?
df <- data.frame(origin=c(rep('2016-01-01', 4), rep('2016-02-01',3), rep('2016-03-01',2)),
date=c('2016-01-01','2016-02-01','2016-03-01','2016-04-01','2016-02-01','2016-03-01','2016-04-01','2016-03-01','2016-04-01'),
val=rnorm(9))
df$date <- as.Date(df$date)
df$origin <- as.Date(df$origin)
df
origin date val
1 2016-01-01 2016-01-01 -2.0856573
2 2016-01-01 2016-02-01 -0.5930160
3 2016-01-01 2016-03-01 0.5370460
4 2016-01-01 2016-04-01 1.5539720
5 2016-02-01 2016-02-01 0.4866211
6 2016-02-01 2016-03-01 -0.1443780
7 2016-02-01 2016-04-01 -0.9286197
8 2016-03-01 2016-03-01 -0.6311255
9 2016-03-01 2016-04-01 1.1667005
最佳答案
which(!duplicated(df$origin))
#[1] 1 5 8
如果值可以重复(或未排序),请使用以下内容查找一系列新值的开始位置。
which(c(TRUE, as.character(df$origin)[-NROW(df)] != as.character(df$origin)[-1]))
#[1] 1 5 8
关于r - 获取新值开始的行索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43287394/