Arrays R中的字符串操作

Arrays R中的字符串操作,arrays,r,string,Arrays,R,String,假设我在R中有一个这种格式的字符串: "A<2 & A<=3 & B>5 & B<=1 & A<1" 另一个例子: string <- c("A>3 & A<9 & A<=-1 & A>2 & B<=5") 谢谢 这应该适合您: library(stringr) get_min_max=function(x) { A_less=min(as.numeric(s

假设我在R中有一个这种格式的字符串:

"A<2 & A<=3 & B>5 & B<=1 & A<1"
另一个例子:

string <- c("A>3 & A<9 & A<=-1 & A>2 & B<=5")

谢谢

这应该适合您:

library(stringr)
get_min_max=function(x)
{
  A_less=min(as.numeric(str_match_all(x,'(?:A<=?)(-?[0-9|\\.]+)')[[1]][,2]))
  B_less=min(as.numeric(str_match_all(x,'(?:B<=?)([-?0-9|\\.]+)')[[1]][,2]))
  A_greater=max(as.numeric(str_match_all(x,'(?:A>=?)(-?[0-9|\\.]+)')[[1]][,2]))
  B_greater=max(as.numeric(str_match_all(x,'(?:B>=?)(-?[0-9|\\.]+)')[[1]][,2]))
  A_less=ifelse(A_less==-Inf,NA,A_less)
  B_less=ifelse(A_less==-Inf,NA,B_less)
  A_greater=ifelse(A_greater==-Inf,NA,A_greater)
  B_greater=ifelse(B_greater==-Inf,NA,B_greater)
  return(c(A_less,B_less,A_greater,B_greater))
}
库(stringr)
get_min_max=函数(x)
{
A小于等于min(如.numeric(str_match_all(x,,(?:A=?)([0-9.\\.]+))[1][,2]))
A_less=ifelse(A_less==-Inf,NA,A_less)
B_less=ifelse(A_less==-Inf,NA,B_less)
A\u morer=ifelse(A\u morer==-Inf,NA,A\u morer)
B_morerar=ifelse(B_morerar==-Inf,NA,B_morerar)
返回值(c(A_少,B_少,A_大,B_大))
}

编辑:创建一个函数。现在根据注释处理小数

您可以选择
stringr
并提取不同部分,如下所示:

library("stringr")
string <- c("A>3 & A<9 & A<=-1 & A>2 & B<=5")
str_match_all(string, "([A-Z])([<>=]+)(\\d)")
库(“stringr”)

你试过什么,哪里有问题?您是否考虑过产生此结果的算法?这些命令正在对值进行舍入。请告诉我如何避免它。e、 g.如果min(A)为1.2,则表示A_小于等于1。
library(stringr)
get_min_max=function(x)
{
  A_less=min(as.numeric(str_match_all(x,'(?:A<=?)(-?[0-9|\\.]+)')[[1]][,2]))
  B_less=min(as.numeric(str_match_all(x,'(?:B<=?)([-?0-9|\\.]+)')[[1]][,2]))
  A_greater=max(as.numeric(str_match_all(x,'(?:A>=?)(-?[0-9|\\.]+)')[[1]][,2]))
  B_greater=max(as.numeric(str_match_all(x,'(?:B>=?)(-?[0-9|\\.]+)')[[1]][,2]))
  A_less=ifelse(A_less==-Inf,NA,A_less)
  B_less=ifelse(A_less==-Inf,NA,B_less)
  A_greater=ifelse(A_greater==-Inf,NA,A_greater)
  B_greater=ifelse(B_greater==-Inf,NA,B_greater)
  return(c(A_less,B_less,A_greater,B_greater))
}
library("stringr")
string <- c("A>3 & A<9 & A<=-1 & A>2 & B<=5")
str_match_all(string, "([A-Z])([<>=]+)(\\d)")
[[1]]
     [,1]   [,2] [,3] [,4]
[1,] "A>3"  "A"  ">"  "3" 
[2,] "A<9"  "A"  "<"  "9" 
[3,] "A>2"  "A"  ">"  "2" 
[4,] "B<=5" "B"  "<=" "5"