我有一个数据框如下:
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将是解决方案,但我似乎无法让它工作。
帮助表示赞赏
答案 0 :(得分:1)
cumsum
和diff
的组合就是您所需要的:
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