我有一个看起来像这样的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
答案 0 :(得分: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
由于您的评论表明您使用的是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