我希望在数据框中所有变量名的前三个字符后插入一个下划线。任何帮助将非常感激。
当前数据框:
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))
答案 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
并进行替换。