簡體   English   中英

在R中剪切字符串模型公式

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

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