R:将值定义为范围/区间
R: define value as range / interval
我环顾四周,但找不到有帮助的答案。我正在尝试在 R 中设置一个键值 table,其中键被定义为范围或间隔,以便我可以进行查找以查找落在范围/间隔内的任何键的值.
举一个不起作用的最小例子。
data.frame(key = c(range(0, 1),
range(1, 2)),
value = c("A",
"B"))
数据框不会包含两行,而是四行,因为 R 将下限和上限区间视为两个单独的值,并循环使用值列以达到四行。除了这个问题,我也找不到可以定义下限和上限的范围/区间函数。
编辑:
所需的输出将是这样的 table:
key value
(0, 1) "A"
(1, 2) "B"
所以我可以对值 a 执行类似以下查询的操作:
table$value[其中 %in% table$key]
它不是很优雅,但您可以这样做以使其实用且方便:
df = data.frame(values=letters[1:2])
df$keys=list(0:1, 1:2)
# values keys
#1 a 0, 1
#2 b 1, 2
这样您就不需要像使用 df$keys
访问数据时那样需要 regex
。
如果我没理解错的话,你想找到每个值出现的区间。如果是这种情况,那么您可以通过找到每个 "value" 数字的最小和最大 "key" 数字来实现。
这可以使用 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
这个解决方案是通用的(不管你有多少个值)。此外,如果您对此感兴趣,您可以轻松地 return 最小和最大列,而不是格式 (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
我环顾四周,但找不到有帮助的答案。我正在尝试在 R 中设置一个键值 table,其中键被定义为范围或间隔,以便我可以进行查找以查找落在范围/间隔内的任何键的值. 举一个不起作用的最小例子。
data.frame(key = c(range(0, 1),
range(1, 2)),
value = c("A",
"B"))
数据框不会包含两行,而是四行,因为 R 将下限和上限区间视为两个单独的值,并循环使用值列以达到四行。除了这个问题,我也找不到可以定义下限和上限的范围/区间函数。
编辑: 所需的输出将是这样的 table:
key value
(0, 1) "A"
(1, 2) "B"
所以我可以对值 a 执行类似以下查询的操作: table$value[其中 %in% table$key]
它不是很优雅,但您可以这样做以使其实用且方便:
df = data.frame(values=letters[1:2])
df$keys=list(0:1, 1:2)
# values keys
#1 a 0, 1
#2 b 1, 2
这样您就不需要像使用 df$keys
访问数据时那样需要 regex
。
如果我没理解错的话,你想找到每个值出现的区间。如果是这种情况,那么您可以通过找到每个 "value" 数字的最小和最大 "key" 数字来实现。
这可以使用 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
这个解决方案是通用的(不管你有多少个值)。此外,如果您对此感兴趣,您可以轻松地 return 最小和最大列,而不是格式 (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