确定R data.frame列中值的更改位置

时间:2017-07-17 22:35:38

标签: r dataframe

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

3 个答案:

答案 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)
相关问题