r语言 - 分割字符串并替换索引



我有一个这样的规则

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"
  1. 我需要按索引

    拆分规则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">

  2. 并将索引替换为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"           

最新更新