Мы можем сделать это с parse_number
после filter
ing
library(dplyr)
library(stringr)
df %>%
filter(str_detect(B, "1\\]")) %>%
mutate(B = readr::parse_number(as.character(B)))
# A B C
#1 heart_rate 53 94
#2 heart_rate 54 9
#3 heart_rate 55 7
Или другой вариант base R
transform(subset(cbind(df, read.csv(text = gsub("[][ ]", "",
df$B), header = FALSE)), V2 == 1), B = V1)[names(df)]
# A B C
#1 heart_rate 53 94
#3 heart_rate 54 9
#5 heart_rate 55 7
data
df <- structure(list(A = structure(c(1L, 1L, 1L, 1L, 1L),
.Label = "heart_rate", class = "factor"),
B = structure(c(1L, 3L, 2L, 4L, 5L), .Label = c("[53.0, 1]",
"[54.0, 1]", "[54.0, 2]", "[55.0, 0]", "[55.0, 1]"), class = "factor"),
C = c(94L, 1L, 9L, 1L, 7L)), class = "data.frame", row.names = c(NA, -5L))