[英]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
不能對每個結果運行任何類型的函數,但是使用regexpr
和regmatches
使得此操作非常容易
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.