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

时间:2016-01-14 18:39:32

标签: r string 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

我想添加字符串" 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

2 个答案:

答案 0 :(得分:6)

使用greplsprintflapply的组合:

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

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

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

答案 1 :(得分:0)

我们可以使用mutate_each中的dplyr,然后paste使用library(dplyr) mydf %>% mutate_each(funs(paste0('chr', .)), matches('CHR')) # Input_SNP_CHR Input_SNP_BP Set_1_CHR Set_1_BP Set_2_CHR Set_2_BP Set_3_CHR #1 chr4 184648954 chr18 71883827 chr7 135798891 chr7 #2 chr13 34371442 chr14 52254555 chr1 223293324 chr7 #3 chr18 71883393 chr22 50428069 chr7 138698825 chr8 # Set_3_BP #1 91206783 #2 54912662 #3 97486210 &#39; chr&#39;列中有&#39; CHR&#39;作为列名称的一部分。

pack