如何在r的列中替换字符串的第n个字符

are*_*ddy 3 regex string r gsub dataframe

我的输入是

a<-c("aa_bbb_cc_ddd","ee_fff_gg_hhh")
b<-c("a","b")
df<-data.frame(cbind(a,b))
Run Code Online (Sandbox Code Playgroud)

我希望我的输出是

a<-c("aa_bbb-cc_ddd","ee_fff-gg_hhh")
b<-c("a","b")
df<-data.frame(cbind(a,b))
Run Code Online (Sandbox Code Playgroud)

请帮忙

Tyl*_*ker 5

如果事情是为一致的告诉你,你要替换的第7个字符,然后substring可能是一个很好的路要走,但你通过包装与由列字符data.frame没有stringsAsFactors = FALSE。您需要首先使列字符:

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
Run Code Online (Sandbox Code Playgroud)


Avi*_*Raj 4

您可以使用子,

sub("^([^_]*_[^_]*)_", "\\1-",df$a)
Run Code Online (Sandbox Code Playgroud)

例子:

> 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
Run Code Online (Sandbox Code Playgroud)