[英]Cut string model formula in R
我正在努力將某個字符模型公式切成特定的值。 這是我要剪切的向量:
bla
#[1] "pseudoy ~ x1 + x2 + x3 + x4 + x5 + x6 + (1 | clusterid)"
str(bla)
# chr "pseudoy ~ x1 + x2 + x3 + x4 + x5 + x6 + (1 | clusterid)"
所需的結果應如下所示:
bla2
[1] "pseudoy ~ x1 + x2 + x3 + x4 + x5 + x6"
這是我嘗試過的:
bla2 <- gsub("+ (1 | clusterid)", "", bla)
但不幸的是,這是行不通的:(
我將不勝感激任何幫助。 謝謝!!
您有一個公式,而不只是一個普通的字符串。 對於公式,有其自己的方法:
f <- as.formula("pseudoy ~ x1 + x2 + x3 + x4 + x5 + x6 + (1 | clusterid)")
# pseudoy ~ x1 + x2 + x3 + x4 + x5 + x6 + (1 | clusterid)
g <- terms.formula(f)
modelterms <- attr(g, "term.labels")
#[1] "x1" "x2" "x3" "x4"
#[5] "x5" "x6" "1 | clusterid"
retain <- modelterms[!grepl("|", modelterms, fixed = TRUE)]
#[1] "x1" "x2" "x3" "x4" "x5" "x6"
reformulate(retain, f[[2]])
# pseudoy ~ x1 + x2 + x3 + x4 + x5 + x6
我的回答是假設您希望該解決方案足夠靈活,可以刪除涉及條件說明的所有模型項|
,無需事先了解公式的內容或術語說明的順序。
我們可以嘗試使用sub
。 +
是一個元字符,因此需要轉義。 在這里,我們匹配一個或多個空格( \\\\s+
),然后是+
( \\\\+
),然后是一個或多個空格( \\\\s+
),然后是括號( \\\\(
)以及其后的其他字符( .*
)。將其替換為空白( ""
)
sub("\\s+\\+\\s+\\(.*", "", bla)
#[1] "pseudoy ~ x1 + x2 + x3 + x4 + x5 + x6"
您需要將fixed =參數傳遞給gsub()
gsub(" + (1 | clusterid)", "", bla, fixed = T)
如果fixed = TRUE,則pattern是要按原樣匹配的字符串。
帶縱梁:
library(stringr)
bla <- "pseudoy ~ x1 + x2 + x3 + x4 + x5 + x6 + (1 | clusterid)"
bla2 <- str_match(bla, "(.*) \\+ \\(1 | clusterid\\)")[2]
bla2
#[1] "pseudoy ~ x1 + x2 + x3 + x4 + x5 + x6"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.