我有一个这样的规则
rule <- "X[,14]<=-0.00479499999999999 & X[,14]<=-0.00490000000000002 & X[,14]>-0.00595499999999993 & X[,14]<=-0.00593499999999991 & X[,96]>0.000395000000000034 & X[,96]<=0.000859999999999972"
我需要按索引
拆分规则rule1 <- "X[,14]<=-0.0047 &X [14] & lt; = -0.0049,X[14]在-0.0059,X [14] & lt; = -0.0059
rule2 & lt; - X[96]在0.0003,X [96] & lt; = 0.0008">并将索引替换为1到2的新索引
14,96 to 1,2
rule1 <- "X[,1]<=-0.0047 & X[,1]<=-0.0049 &
X[,1]>-0.0059 & X[,1]<=-0.0059
rule2 <- X[,2]>0.0003 & X[,2]<=0.0008"
我们将'规则'分割为&
',然后将parse_number
的数字部分以数字为一组提取到split
,然后将list
元素提取到paste
,最后将stringr
中的str_replace_all
替换为索引
library(stringr)
v1 <- strsplit(rule, "\s*\&\s*")[[1]]
v2 <- trimws(sapply(split(v1, readr::parse_number(v1)), function(x)
sub("\s*\&\s*$", "", paste(x, collapse=" & "))))
str_replace_all(v2, setNames(as.character(seq_along(v2)), names(v2)))
与产出
#[1] "X[,1]<=-0.00479499999999999 & X[,1]<=-0.00490000000000002 & X[,1]>-0.00595499999999993 & X[,1]<=-0.00593499999999991"
#[2] "X[,2]>0.000395000000000034 & X[,2]<=0.000859999999999972"