[英]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.