【问题标题】:Identifying where value changes in R data.frame column识别 R data.frame 列中值变化的位置
【发布时间】:2023-04-10 13:14:02
【问题描述】:

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

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    一个简单的解决方案是使用 dplyr 中的 lag 函数:

    which(df$value != dplyr::lag(df$value))
    

    【讨论】:

      【解决方案2】:

      类似于@thc 的回答,但没有依赖关系:

      which(c(FALSE, tail(df$value,-1) != head(df$value,-1)))
      #[1] 4 7 9
      

      【讨论】:

        【解决方案3】:

        您可以使用rle(运行长度编码):

        cumsum(rle(df$value)$lengths)+1
        [1]  4  7  9 11
        

        您可以使用head 删除最后一个值:

        head(cumsum(rle(df$value)$lengths)+1, -1)
        

        【讨论】:

        • 你需要删除最后一个值。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        • 2019-11-09
        • 2020-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多