我有一些数据是由“|”分隔的数字,例如:
head(mintimes)
[1] "3121|3151" "1171" "1351|1381" "1050" "" "122"
head(minvalues)
[1] 14 10 11 31 Inf 22
我想做的是一直提取并将它们与最小值匹配。最后得到类似的东西:
times values
3121 14
3151 14
1171 10
1351 11
1381 11
1050 31
122 22
我试过
strsplit(mintimes, "|")
我试过str_extract(mintimes, "[0-9]+")
但它们似乎不起作用。有任何想法吗?
最佳答案
|
是一个正则表达式元字符。在字面上使用时,这些特殊字符需要使用 []
进行转义。或与 \\
(或者您可以在某些函数中使用 fixed = TRUE
)。所以您调用strsplit()
应该
strsplit(mintimes, "[|]")
或者
strsplit(mintimes, "\\|")
或者
strsplit(mintimes, "|", fixed = TRUE)
关于您对
stringr
的其他尝试函数, str_extract_all()
似乎可以解决问题。library(stringr)
str_extract_all(mintimes, "[0-9]+")
获得您想要的结果 ,
> mintimes <- c("3121|3151", "1171", "1351|1381", "1050", "", "122")
> minvalues <- c(14, 10, 11, 31, Inf, 22)
> s <- strsplit(mintimes, "[|]")
> data.frame(times = as.numeric(unlist(s)),
values = rep(minvalues, sapply(s, length)))
# times values
# 1 3121 14
# 2 3151 14
# 3 1171 10
# 4 1351 11
# 5 1381 11
# 6 1050 31
# 7 122 22
关于regex - 从包含 '|' 的字符串中提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24254283/