有没有一种方法可以按大小组织一组行,然后在其中任何行彼此在特定阈值内时抛出一个标志?

问题描述 投票:0回答:1

我有一个长时间旋转后看起来像这样的数据集

data<-data.frame(
  ID=c("type1","type1","type1","type1","type1","type1","type2","type2","type2","type2","type2","type2"),
  tag=c(1,2,3,4,5,6,1,2,3,4,5,6),
  value=c(0.2,0.7,0.45,0.4,1,0,0.056,0.12,0.3,0.67,0.09,0.004)
)

有没有办法在按 id 分组后按大小组织值,取前 3 个最多,然后如果特定标签在彼此的阈值内并保存,则抛出一个标志。

例如:如果阈值设置为 0.05,则 type1 将为

[1,0.7,0.45,0.4,0.2,0]
,然后会出现一个标记,表明标签 3 和 4 在彼此的阈值边界内。

目标是能够向由最顶部标签组成的每种类型添加代码,并在阈值内添加注释(如果有)。

因此,类型 1 标签将为 523(阈值内为 4),类型 2 将为 631,但不会抛出任何标志,因为在前 3 个值的 0.05 范围内没有值

id 标签 旗帜
类型1 523 4 在阈值内
类型2 631 不适用

我目前可以订购它,但内部阈值给我带来了如何解决该问题的问题。

r dataframe nested pivot threshold
1个回答
0
投票
threshold = 0.05
data |>
  arrange(ID, -value) |>
  summarize(label = paste0(tag[row_number() <= 3], collapse = ""),
            flag = value[row_number() == 3] - value[row_number() == 4] <= threshold,
            .by = ID)

在类型 1 中,#4 值 0.40 在 #3 值 0.40 的 0.05 范围内。 在类型 2 中,#4 值 0.09 在 #3 值 0.12 的 0.05 范围内。

     ID label flag
1 type1   523 TRUE
2 type2   432 TRUE
© www.soinside.com 2019 - 2024. All rights reserved.