如何在每个其他列的前面添加一个字符串?

Eva*_*van 1 string r dataframe

我有一个看起来像这样的data.frame:

Input_SNP_CHR Input_SNP_BP Set_1_CHR Set_1_BP Set_2_CHR  Set_2_BP Set_3_CHR Set_3_BP
            4    184648954        18 71883827         7 135798891         7 91206783
           13     34371442        14 52254555         1 223293324         7 54912662
           18     71883393        22 50428069         7 138698825         8 97486210
Run Code Online (Sandbox Code Playgroud)

我想在每个CHR列中添加字符串"chr",以使我的输出看起来像:

Input_SNP_CHR Input_SNP_BP Set_1_CHR Set_1_BP Set_2_CHR  Set_2_BP Set_3_CHR Set_3_BP
         chr4    184648954     chr18 71883827      chr7 135798891      chr7 91206783
        chr13     34371442     chr14 52254555      chr1 223293324      chr7 54912662
        chr18     71883393     chr22 50428069      chr7 138698825      chr8 97486210
Run Code Online (Sandbox Code Playgroud)

A5C*_*2T1 6

使用的组合grepl,sprintf以及lapply:

CHR <- grepl("CHR", names(mydf))

mydf[CHR] <- lapply(mydf[CHR], sprintf, fmt = "chr%s")
mydf
#   Input_SNP_CHR Input_SNP_BP Set_1_CHR Set_1_BP Set_2_CHR  Set_2_BP Set_3_CHR Set_3_BP
# 1          chr4    184648954     chr18 71883827      chr7 135798891      chr7 91206783
# 2         chr13     34371442     chr14 52254555      chr1 223293324      chr7 54912662
# 3         chr18     71883393     chr22 50428069      chr7 138698825      chr8 97486210
Run Code Online (Sandbox Code Playgroud)

由于您的评论表明您使用data.table的是s而不是data.frames,因此您可以尝试以下方式:

CHR <- grep("CHR", names(DT), value = TRUE)
DT[, (CHR) := lapply(.SD, sprintf, fmt = "chr%s"), .SDcols = CHR][]
Run Code Online (Sandbox Code Playgroud)