簡體   English   中英

如何在r中的列中替換字符串的第n個字符

[英]how to replace nth character of a string in a column in r

我的意見是

a<-c("aa_bbb_cc_ddd","ee_fff_gg_hhh")
b<-c("a","b")
df<-data.frame(cbind(a,b))

我想要我的輸出

a<-c("aa_bbb-cc_ddd","ee_fff-gg_hhh")
b<-c("a","b")
df<-data.frame(cbind(a,b))

請幫忙

如果事情與你顯示的一致,並且你想要替換第7個字符,那么substring可能是一個很好的方法,但你通過使用data.frame包裝而沒有stringsAsFactors = FALSE data.frame列字符。 您需要先創建列字符:

df$a <- as.character(df$a)
substring(df$a, 7, 7) <- "-"
df

##               a b
## 1 aa_bbb-cc_ddd a
## 2 ee_fff-gg_hhh b

你可以用sub,

sub("^([^_]*_[^_]*)_", "\\1-",df$a)

例:

> a<-c("aa_bbb_cc_ddd","ee_fff_gg_hhh")
> b<-c("a","b")
> df<-data.frame(cbind(a,b))
> df
              a b
1 aa_bbb_cc_ddd a
2 ee_fff_gg_hhh b
> df$a <- sub("^([^_]*_[^_]*)_", "\\1-",df$a)
> df
              a b
1 aa_bbb-cc_ddd a
2 ee_fff-gg_hhh b

下面就來替換第n個出現的一般方法_-

n <- 2

# create regex pattern based on n
pat <- paste0("^((?:.*?_){", n - 1, "}.*?)_")
# [1] "^((?:.*?_){1}.*?)_"

# replace character
sub("^((?:.*?_){1}.*?)_", "\\1-", df$a, perl = TRUE)
# [1] "aa_bbb-cc_ddd" "ee_fff-gg_hhh"

暫無
暫無

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

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