我在R中有一个data.frame
,其中value
列包含类character
的数据。我想确定value
更改的行号。在下面的示例中,我想要退出4,7和9.有没有办法在没有循环的情况下执行此操作?
df <- data.frame(ind=1:10,
value=as.character(c(100,100,100,200,200,200,300,300,400,400)),
stringsAsFactors=F)
df
ind value
1 1 100
2 2 100
3 3 100
4 4 200
5 5 200
6 6 200
7 7 300
8 8 300
9 9 400
10 10 400
答案 0 :(得分:6)
与@ thc的答案类似,但没有依赖:
which(c(FALSE, tail(df$value,-1) != head(df$value,-1)))
#[1] 4 7 9
答案 1 :(得分:4)
一个简单的解决方案是在dplyr中使用滞后函数:
which(df$value != dplyr::lag(df$value))
答案 2 :(得分:3)
您可以使用rle
(运行长度编码):
cumsum(rle(df$value)$lengths)+1
[1] 4 7 9 11
您可以使用head
删除最后一个值:
head(cumsum(rle(df$value)$lengths)+1, -1)