R 将单个点与其前面的点进行比较

R 将单个点与其前面的点进行比较,r,R,我有一个数据框(称之为df),其中有“u”和“time”列,我通过将这些点与分位数进行比较,有条件地给这个数据框的图中的点上色 我目前正在工作 col=ifelse(df$u > quantile(df$u,.98),'orangered2', 'black') 但是我还想添加一个条件:如果前面的点在.95分位数,而当前的点也在.95分位数,那么把这些点涂成黄色。基本上,如果一行中的两个或多个点大于.95分位数,则突出显示这些点。如果在这一点和后面的点之间写一个比较比较容易,那么基本上应

我有一个数据框(称之为df),其中有“u”和“time”列,我通过将这些点与分位数进行比较,有条件地给这个数据框的图中的点上色

我目前正在工作

col=ifelse(df$u > quantile(df$u,.98),'orangered2', 'black')
但是我还想添加一个条件:如果前面的点在.95分位数,而当前的点也在.95分位数,那么把这些点涂成黄色。基本上,如果一行中的两个或多个点大于.95分位数,则突出显示这些点。如果在这一点和后面的点之间写一个比较比较容易,那么基本上应该是一样的(我认为)

在其他符号中:

if y(x)>quantile(.98): color red
else if (y(x)>quantile(.95)&y(x+1)>quantile(.95)): color yellow
else if (y(x)>quantile(.94): color purple
我试着使用lag(),正如我在另一个问题中看到的,关于将值与它们前面的值进行比较

col=ifelse(df$u > quantile(df$u,.98),'orangered2', 
           ifelse((df$u > quantile(df$u,.95))&(lag(df$u) > quantile(df$u,.95)), 'gold1', 
                  ifelse(df$u > quantile(df$u, .94),'darkorchid3','darkgrey')))
但是,如果我尝试同样的事情而没有滞后(df$u)部分,我会得到完全相同的图,这不是我想要的。我读了《滞后》,似乎这不是我想要的,但我只是想用另一个问题的答案

(此外,这是我在stack上的第一个问题,因此非常感谢您对如何改进我的问题的评论)


谢谢

这不是最有效的方法,但这里有一个说明性的例子

# simulate data and load `dplyr`
set.seed(47)
df = data.frame(u = rnorm(100))
library(dplyr)



df$color = with(
    df,
    ifelse(
        u > quantile(u, 0.98),
        "red",
        ifelse(
            # for yellow, we have a complex condition
            # u must be greater than 0.8 quantile
            #                 AND either one before or one after must also be greater than 0.8 quantile
            u > quantile(u, 0.8) & (lag(u) > quantile(u, 0.8) | lead(u) > quantile(u, 0.8)),
            "yellow",
            ifelse(u > quantile(u, 0.75), "purple", "gray80")
        )
    )
)
虽然我不喜欢你选的颜色,但你可以用

plot(df$u, col = df$color)

如果我斜视正确,我可以看到黄色。

stats::lag
是为时间序列数据构建的,但是
dplyr::lag
可能更符合您的要求。关于如何改进问题,请尝试使用虚拟数据包含一个样本
data.frame
,以及另一个显示预期结果/期望结果的
data.frame
。类似于
set.seed(47);df=data.frame(u=rnorm(100))
是一种方便、重复地共享数据的好方法。出于说明目的,您可能还希望降低阈值,以便使用较小的随机数据,很有可能一行中有两个点落在分位数阈值之外。例如,对于100个随机正常点,您仍然可以将0.98保留为红色,但黄色可能使用0.80,紫色可能使用0.75。加载
dplyr
library(dplyr)
)或使用双冒号调用它,
dplyr::lag()
。非常好,这非常好。我还将颜色改为适合眼球的颜色:橙色2、金色1、暗红色3和暗灰色,所有颜色都在黑色背景上。