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)
使用的组合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)