我有一个长时间旋转后看起来像这样的数据集
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 | 不适用 |
我目前可以订购它,但内部阈值给我带来了如何解决该问题的问题。
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