R:将值定义为范围/间隔

时间:2015-08-07 07:31:06

标签: r range intervals bounds

我环顾四周但找不到有帮助的答案。我试图在R中设置键值表,其中键被定义为范围或间隔,以便我可以查找以查找范围/间隔内的任何键的值。 给出一个不起作用的最小例子。

data.frame(key = c(range(0, 1),
                   range(1, 2)),
           value = c("A", 
                     "B"))

数据框不会包含两行而是四行,因为R将较低和较高的间隔限制为两个单独的值,并循环使用值列以达到四行。除了这个问题,我还找不到一个范围/区间函数,我可以在其中定义下限和上限。

编辑: 所需的输出将是这样的表:

key      value    
(0, 1)   "A"
(1, 2)   "B"

所以我可以对以下值进行类似的查询: table $ value [%table in $ table]

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望找到每个值出现的间隔。如果是这种情况,那么你可以通过找到最小和最大的"键"每个"值的数字"数字。

使用dplyr包可以轻松实现,如下所示:

#If not installed do install.packages("dplyr")
library(dplyr)

#Provided example
df = data.frame(key = c(range(0, 1),range(1, 2)),
                value = c("A", "B"))

#First group data by "value" variable
# and then paste a vector with min and max of "key" variable
df2 = df %>% 
      group_by(value) %>% 
      summarise(key = paste0("(", min(key), ",", max(key), ")"))

结果:

  value   key
1     A (0,1)
2     B (1,2)

您可以通过执行以下操作轻松获取间隔中的值:

subset(df2, key == "(0,1)")$value

此解决方案是通用的(它与您拥有的值无关)。此外,如果您感兴趣,可以轻松返回最小和最大列,而不是格式(min,max)

df3 = df %>% 
      group_by(value) %>% 
      summarise(min = min(key), 
                max = max(key))

结果:

  value min max
1     A   0   1
2     B   1   2

您可以通过以下方式获得所需的间隔:

subset(df3, min >= 0 & max <= 1)$value

答案 1 :(得分:0)

这不是很优雅,但你可以做到这一点,使其实用和方便:

df = data.frame(values=letters[1:2])
df$keys=list(0:1, 1:2)
#  values keys
#1      a 0, 1
#2      b 1, 2

因此,在使用regex访问数据时,您不需要df$keys