findInterval
нужен вектор для значений бина. Вот один из способов преобразования b$Var1
в вектор -
library(tidyverse)
vec <- b %>%
mutate(b_tmp = str_sub(Var1, 2, -2)) %>%
separate(b_tmp, c("minI", "maxI"), sep = ",") %>%
mutate_at(c("minI", "maxI"), as.numeric) %>%
{sort(c(pull(., minI), pull(., maxI)))} %>%
unique()
vec
[1] -1.616 -0.793 -0.200 0.301 0.937 3.253
# c is a function in R so not a good idea to use it as object; using vec_c instead
vec_c <- c(-0.36167553, -0.42019310, 1.80365545, 1.45542530, -0.72798537, 0.32368285)
interval_c <- findInterval(vec_c, vec)
[1] 2 2 5 5 2 4
Данные -
b <- structure(list(Var1 = structure(c(3L, 2L, 1L, 4L, 5L), .Label = c("[-0.200,0.301)",
"[-0.793,-0.200)", "[-1.616,-0.793)", "[0.301,0.937)", "[0.937,3.253]"
), class = "factor"), Freq = c(10L, 10L, 10L, 10L, 10L)), .Names = c("Var1",
"Freq"), class = "data.frame", row.names = c(NA, -5L))