【问题标题】:R - Change row values based on the contents of neighbouring rowsR - 根据相邻行的内容更改行值
【发布时间】:2013-01-10 10:09:32
【问题描述】:

我在两列中有一系列数字,标题为"a""b"

如果“a"”列中的值与其相邻单元格之间的差异大于 10,我想让 R 更改列 "b" 中的值。

例如:

a   |   b
-----------    
1   |   1
2   |   1
3   |   1
4   |   1
21  |   1
22  |   1
23  |   1
24  |   1
... |   ...

然后我希望 R 将“b”列中的值更改为

a   |   b
-----------    
1   |   1
2   |   1
3   |   1
4   |   0
21  |   0
22  |   1
23  |   1
24  |   1
... |   ...

因为 a 列中的值 4 和 21 彼此大于 10。

任何帮助将不胜感激。

【问题讨论】:

    标签: r neighbours


    【解决方案1】:
    df <- data.frame(a = c(1:4, 21:24), b = 1)
    
    # check whether differences are greater than 10 
    diffs <- diff(df$a) > 10
    
    # create `b`
    df$b <- as.integer(!(c(FALSE, diffs) | c(diffs, FALSE)))
    

    结果:

       a b
    1  1 1
    2  2 1
    3  3 1
    4  4 0
    5 21 0
    6 22 1
    7 23 1
    8 24 1
    

    【讨论】:

      【解决方案2】:

      一些替代品。

      df <- data.frame(a = c(1:4, 21:24), b = 1L)
      local({
       w10 <- with(df, which(diff(a) > 10)))
       df$b[c(w10, w10+1)] <<- 0L
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-22
        • 2020-05-19
        • 1970-01-01
        • 1970-01-01
        • 2021-09-22
        • 1970-01-01
        • 2013-09-05
        • 2019-07-23
        相关资源
        最近更新 更多