如果行之间的列中增加的值大于1,请设置一个值

时间:2017-01-29 10:51:36

标签: r

我有一个数据框如下:

RecordID <- c("a","b","c","d","e","f","g")
row.number <- c(1,2,10,11,12,45,46)
df <- data.frame(RecordID, row.number)
df$frame.change =1

如果row.number从前一行增加超过1,我希望frame.change中的值从前一行增加1。我正在尝试以下代码,但它不起作用:

for( i in 2:nrow(df)){
  df$frame.change[i] <- if( (df$frame.change[i] - df$frame.change[i-1]) <1 ){df$frame.change[i-1] }else{ df$frame.change[i-1] +1 }
  cat("-")
}

它不需要在for循环中完成,我认为lapply将是解决方案,但我似乎无法让它工作。

帮助表示赞赏

1 个答案:

答案 0 :(得分:1)

cumsumdiff的组合就是您所需要的:

df$frame.change <- cumsum(c(1, diff(df$row.number) > 1))

给出:

> df
  RecordID row.number frame.change
1        a          1            1
2        b          2            1
3        c         10            2
4        d         11            2
5        e         12            2
6        f         45            3
7        g         46            3