簡體   English   中英

R中的字符串運算

[英]String operations in R

假設我在R中有一個這種格式的字符串:

"A<2 & A<=3 & B>5 & B<=1 & A<1"

現在,我希望獲得包含它們各自值的四個變量,即' A_less '(A <),' A_greater '(A>),' B_less' (B <)和' B_greate r'(B>)

在“ A <”的情況下,比較該特定子字符串的所有值並給出該條件的最佳值,即

'A_less' = 1
'B_less' = 1
'B_greater' = 5
'A_greater' = NA

另一個例子:

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

那么變量的輸出將是

'A_less' = -1
'A_greater' = 3
'B_less' = 5
'B_greater' = NA

謝謝!

這應該為您工作:

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並提取不同的部分,如下所示:

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" 

循環遍歷結果,然后再應用一些if / else構造。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM