将下划线插入变量名R的特定部分

时间:2017-10-02 19:30:32

标签: r

我希望在数据框中所有变量名的前三个字符后插入一个下划线。任何帮助将非常感激。

当前数据框:

df1 <- data.frame("genCrc_b1"=c(1,1,1),"genprd"=c(1,1,1) ,"genopr_b1_b2"=c(1,1,1))

所需数据框:

df2 <- data.frame("gen_Crc_b1"=c(1,1,1),"gen_prd"=c(1,1,1) ,"gen_opr_b1_b2"=c(1,1,1))

我的尝试:

gsub('^(.{3})(.*)$', "_", names(df1))
gsub('^(.{3})(.*)$', '\\_\\2', names(df1))

3 个答案:

答案 0 :(得分:4)

我们可以使用sub将前3个字符作为一组((.{3}))捕获,并在替换中指定组的后向引用(\\1),后跟下划线

names(df1) <- sub("^(.{3})", "\\1_", names(df1))
names(df1)
#[1] "gen_Crc_b1"    "gen_prd"       "gen_opr_b1_b2"

在OP的帖子中,特别是最后一篇,有两个捕获组,但只指定了一个

gsub('^(.{3})(.*)$', '\\1_\\2', names(df1))

顺便说一句,我们不需要gsub因为我们只是在一个实例上而不是多次更换。

在第一种情况下,替换

中没有使用捕获组的反向引用

答案 1 :(得分:2)

如果您的变量名称都以gen开头,我们也可以执行以下操作。

colnames(df1) <- gsub("gen", "gen_", colnames(df1), fixed = TRUE)

答案 2 :(得分:2)

您也可以使用regmatches<-替换子表达式。

regmatches(names(df1), regexpr("gen", names(df1), fixed=TRUE)) <- "gen_"

现在,检查值是否已正确更改。

names(df1)
[1] "gen_Crc_b1"    "gen_prd"       "gen_opr_b1_b2"

这里,regexpr找到与子表达式匹配的字符向量的每个元素中的第一个位置,&#34; gen&#34;。这些位置被送到regmatches并进行替换。