首页 > 解决方案 > 通过引用 R 中的行号跨行汇总

问题描述

亲爱的数据操作向导,

我正在尝试以引用行号的方式总结我的数据框,但我找不到以整洁的方式完成它的方法。我的数据框看起来像这样。

# Sample data frame.
df <- data.frame(value = c(1,2,1,1,2,4,5,3,2))

  value
1     1
2     2
3     1
4     1
5     2
6     4
7     5
8     3
9     2

我需要创建一个列,它表示TRUE相应value 的数字以及接下来 4 个连续行中的数字是否都大于或等于 2。生成的数据框应如下所示:

  value largerThan
1     1      FALSE
2     2      FALSE
3     1      FALSE
4     1      FALSE
5     2       TRUE
6     4         NA
7     5         NA
8     3         NA
9     2         NA

注意NA最后四行中的四个largerThan。这是因为这些行后面没有 4 个连续的行,因此无法评估它们。这就是让我感到困惑的原因,以及我不知道在使用tidyverse语法时如何引用行号这一事实。这更简单for loops,但我想不出等价物。

非常感谢您的建议!特别是如果您有tidyverse解决dplyr方案,因为这些是其余代码中使用的包。

标签: rdplyrtidyverse

解决方案


抱歉,对 tidyverse 不够熟悉。这是一个可能的data.table解决方案。也许你可以把它翻译成 tidyverse

library( data.table )
setDT(df)
df[, largerThan := frollsum( value >= 2, n = 5, align = "left" ) > 4 ]
#    value largerThan
# 1:     1      FALSE
# 2:     2      FALSE
# 3:     1      FALSE
# 4:     1      FALSE
# 5:     2       TRUE
# 6:     4         NA
# 7:     5         NA
# 8:     3         NA
# 9:     2         NA

推荐阅读