R:将每个值与列中的一组先前值进行比较

标签 r dplyr

问题

假设我们有这样一个数据集:

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

我如何将每个值与一组以前的值进行比较,最好是在 dplyr 中?

具体例子

对于每个值,我想知道它是否大于前 4 个值中的每一个(不包括前 4 个值不存在的情况),所需输出为:

> df
   X  Diff
1  1    NA
2  2    NA
3  3    NA
4  4    NA
5  5  TRUE
6  4 FALSE
7  3 FALSE
8  2 FALSE
9  1 FALSE
10 2 FALSE
11 3 FALSE
12 4  TRUE

到目前为止已经尝试过

我可以使用 diff 函数实现与前一个值的基本比较:

df$diff <- c(NA, ifelse(diff(df$X) > 0, "TRUE", "FALSE"))
> df
   X  Diff
1  1  <NA>
2  2  TRUE
3  3  TRUE
4  4  TRUE
5  5  TRUE
6  4 FALSE
7  3 FALSE
8  2 FALSE
9  1 FALSE
10 2  TRUE
11 3  TRUE
12 4  TRUE

我查看了 zoo 包中的 rollmax() 函数,但找不到一种方法来限制只比较前 4 个值。

最佳答案

library(zoo)

df <- data.frame(X = c(1,2,3,4,5,4,3,2,1,2,3,4))
df %>%
  mutate(diff = X > lag(rollmaxr(X, 4, fill = NA)))

   X  diff
1  1    NA
2  2    NA
3  3    NA
4  4    NA
5  5  TRUE
6  4 FALSE
7  3 FALSE
8  2 FALSE
9  1 FALSE
10 2 FALSE
11 3 FALSE
12 4  TRUE

关于R:将每个值与列中的一组先前值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59091636/

相关文章:

r - 按中位数拆分数据框

r - 如何按组填写范围内缺失的日期

R 组合表达式列表中的表达式

r - Shiny - 在用于 ggplot 的响应式(Reactive) dplyr 表达式中使用 sliderInput 的日期范围

r - 根据组属性过滤组中的行

R 带/不带 dplyr 每行 : create new columns as combinations of prev. 列

python - 如何在 Python 中集成 beta 发行版

R 获取列的所有组合并对它们执行函数返回对称矩阵?

r - 如何使用 R 中的 gWidgets 更改 gwindow() 的 WM 图标?

r - 使用模糊合并/sqldf 合并两个数据框