问题
假设我们有这样一个数据集:
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/