我环顾四周但找不到有帮助的答案。我试图在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]
答案 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
。