我有一个包含2列的矩阵,矩阵的开头如下所示:
SNP Pi1
[1,] "SNP_Label" "Pi1"
[2,] "rs482519" "0.3722219"
[3,] "rs12196956" "0.3212364"
[4,] "CNV548726" "0.3112315"
[5,] "CNV356212" "0.3078721"
[6,] "rs4792617" "0.3023402"
[7,] "CNV2095401" "0.2979626"
[8,] "CNV4528251" "0.29391"
[9,] "rs9369426" "0.2860793"
[10,] "rs31672" "0.2790241"
[11,] "rs1323446" "0.2778401"
规范是我想从以“ CNV ”开头的SNP中分离以“ rs ”开头的SNP,并为每个SNP获取一个新矩阵SNPS的两种类型及其相应的Pi1值。 SNP的名称都是随机的,因此“rs”或“CNV”将在行与行之间随机出现。
我想我可能需要一个for循环来运行SNP列中每个条目的前2个字符,但我不知道这是对的。
答案 0 :(得分:1)
将其设为data.frame,然后执行以下操作:
mylabel <- gsub("[0-9]", "", my.df[[1]])
list.of.dfs <- split(my.df, mylabel)
这样做的方法是mylabel只会在gsub之后的第一列中保留字母标识符。然后,split会根据这些标识符将您的data.frame分成块。
将为您提供包含所有唯一标签的data.frames列表。之后您可以选择带有“rs”和“CNV”名称的名称。
$CNV
V1 V2
3 CNV548726 0.3112315
4 CNV356212 0.3078721
6 CNV2095401 0.2979626
7 CNV4528251 0.2939100
$rs
V1 V2
1 rs482519 0.3722219
2 rs12196956 0.3212364
5 rs4792617 0.3023402
8 rs9369426 0.2860793
9 rs31672 0.2790241
10 rs1323446 0.2778401
答案 1 :(得分:0)
a <- data.matrix(cbind(c("rs1","CNV1","rs2","CNV2"),c("a","b","c","d")))
rs <- a[grep("^rs",a),]
cnv <- a[grep("^CNV",a),]
使用grep查找模式,“^”检查模式是否在开始。