簡體   English   中英

如何增加gsub()替換字符串?

[英]How can you increment a gsub() replacement string?

假設一個數據幀有許多列都表示“獎勵”。 目標是用附加的數字唯一地重命名每個獎金欄。 示例數據:

string  <- c("bonus", "bonus", "bonus", "bonus")
string
[1] "bonus" "bonus" "bonus" "bonus"

所需的列名稱輸出:

[1] "bonus1" "bonus2" "bonus3" "bonus4"

假設您不知道有多少獎金列,因此您不能簡單地從1到該數目的列粘貼到每個獎金列名稱。

以下方法有效,但看起來不太優雅,而且編碼過於嚴格:

bonus.count  <- nrow(count(grep(pattern = "bonus", x = string)))
string.numbered  <- paste0(string, seq(from = 1, to = bonus.count, 1)

gsub函數(或另一個基於正則表達式的函數)如何替換遞增的數字? 沿線

string.gsub.numbered  <- gsub(pattern = "bonus", replacement = "bonusincremented by one until no more bonuses", x = string)

據我所知, gsub不能對每個結果運行任何類型的函數,但是使用regexprregmatches使得此操作非常容易

string  <- c("bonus", "bonus", "bonus", "bonus")
m <- regexpr("bonus",string)
regmatches(string,m) <- paste0(regmatches(string,m), 1:length(m))
string
# [1] "bonus1" "bonus2" "bonus3" "bonus4"

好的部分是regmatches允許賦值,因此很容易換出匹配的值。

1)使用問題中定義的string ,我們可以編寫:

paste0(string, seq_along(string))

2)如果您真正擁有的是這樣的東西:

string2 <- "As a bonus we got a bonus coupon."

並且您想要將其更改為"As a bonus1 we got a bonus2 coupon." 那么gsubfn 中的gsubfn可以做到這一點。 下面, p原型對象的fun方法將應用於每次出現的"bonus"並且count自動增加。 原型對象p自動保存匹配之間的count狀態,以允許以下操作:

library(gsubfn)
string2 <- "As a bonus we got a bonus coupon." # test data

p <- proto(fun = function(this, x) paste0(x, count))
gsubfn("bonus", p, string2)

給予:

[1] "As a bonus1 we got a bonus2 coupon."

原始小插圖中還有其他示例。

暫無
暫無

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

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