r - 如何检查映射表中的值范围?

标签 r dplyr

输入:

library(dplyr)
A <- data_frame(Type=c("A","A","B"),R=c(3, 7, 12), Value = c(120, 130,300))
A
   Type     R Value
  (chr) (dbl) (dbl)
1     A     3   120
2     A     7   130
3     B    12   300

映射数据集:

Mapping <- data_frame(Type=c("A","A","A","B","B","B"), Rmin =     c(1,6,11,1,6,11), Rmax = c(5,10,15,5,10,15), Threshold = c(50,100,200,50,200,300))
Mapping

   Type  Rmin  Rmax Threshold
  (chr) (dbl) (dbl)     (dbl)
1     A     1     5        50
2     A     6    10       100
3     A    11    15       200
4     B     1     5        50
5     B     6    10       200
6     B    11    15       300

预计将通过以下步骤获得输出。

  1. 使用 A 和 Mapping 中相同的 Type 值,找到 R >= Rmin 且 R <= Rmax 的条目的阈值。例如,对于 A 中的第 1 行表,阈值应为 50(1<=3<=5,且类型 A)。
  2. isAbove 值是通过分配 isAbove <- 120>=50 获得的

因此,预期输出为:

B <-  data_frame(Type=c("A","A","B"),R=c(3, 7, 12), Value = c(60, 90,250), isAbove = c(T,F,F))
 B

    Type     R Value isAbove
   (chr) (dbl) (dbl)   (lgl)
 1     A     3    120    TRUE
 2     A     7    130   TRUE
 3     B    12    300  FALSE

最佳答案

使用 data.table 的非等值连接功能非常适合这种情况。使用:

library(data.table)

setDT(A)
setDT(Mapping)

A[Mapping, on = .(Type, R > Rmin, R < Rmax), isAbove := Value > Threshold]

给你:

> A
   Type  R Value isAbove
1:    A  3   120    TRUE
2:    A  7   130    TRUE
3:    B 12   300   FALSE

关于r - 如何检查映射表中的值范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44366156/

相关文章:

r - 查找共享列信息 - 最不常见的祖先问题

r - 在 R 中替代 dlply

r - dplyr:通过多个重叠的组结构进行汇总并加入

r - 使用 dplyr 获取 R 中 data.frame 列总和的更好方法

通过 dplyr group_by 运行列表并每次进行总结和变异

r - 有没有一种简单的方法来重新编码因子变量的级别,以便将低于给定频率的级别重新编码为 "other"

java - R/Java .jar - 设置环境变量。未找到 native JRI 库

r - 如何在ggplot中的箱线图上打印平均值、中位数和标准差?

r - 从动物园对象转换时避免 (as)data.frame 将数据更改为因子

r - Magritttr + lapply,其中第一个参数不是 LHS