查找data.frame中的值是否包含在第二个data.frame的min和max范围内

时间:2018-06-07 07:36:33

标签: r dataframe find range

我有两个data.frames,我希望知道df_1中的值是否包含在df_2的最小和最大范围内。

这是我的例子:

df_1 = data.frame(x = c(0.5, 0.75, 0.15, 0.1))
df_2 = data.frame(min = c(0.2, 0.5, 0.1, 0.6), max = c(0.9, 0.6, 0.35, 1))

所需的输出应该是例如只是一个TRUE或FALSE的逻辑向量,在这种情况下,所需的输出是:

> out
[1]  TRUE FALSE  TRUE FALSE

这应该是微不足道的,但到目前为止我找不到答案。

任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:3)

你只需要基础R:

df_2$min <= df_1$x & df_1$x <= df_2$max

dplyr中不需要tidyverse或其他任何内容。但是,如果你真的想要它,你可以随时做到:

dplyr::between(df_1$x, df_2$min, df_2$max)

可能稍微好一点的可读性(虽然代码稍微差一点 - 高尔夫)。

答案 1 :(得分:2)

你也可以这样做:

df_1$x %in% c(df_2$min, df_2$max)

[1]  TRUE FALSE FALSE  TRUE

还允许您将其用于索引,例如:

df_1[df_1$x %in% c(df_2$min, df_2$max),]

[1] 0.5 0.1

答案 2 :(得分:1)

df_1%>%
  dplyr::bind_cols(df_2)%>%
  mutate(res=if_else(x<min | x>max,F,T))%>%
  .[,"res"]