I have a data.frame that looks like:
Input_SNP Set_1 Set_2 Set_3
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的新列。我想在冒号后提取数字并将其设为一个名为BP的新列。为了使这更清楚,这就是所需的输出:
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
因此,我想从N列开始并以2N列结束。我怎样才能做到这一点?我应该使用grep吗?
答案 0 :(得分:2)
这是一种方法:
library(splitstackshape)
df <- read.table(header=T, text="Input_SNP Set_1 Set_2 Set_3
4:184648954 18:71883827 7:135798891 7:91206783
13:34371442 14:52254555 1:223293324 7:54912662
18:71883393 22:50428069 7:138698825 8:97486210")
df <- cSplit(df, 1:4, ":")
names(df) <- paste0(sub("(.*_).*", "\\1", names(df)), c("CHR", "BP"))
df
# 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: 4 184648954 18 71883827 7 135798891 7 91206783
# 2: 13 34371442 14 52254555 1 223293324 7 54912662
# 3: 18 71883393 22 50428069 7 138698825 8 97486210