0

我有一个包含 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"   

规范是我想将以“ rs ”开头的 SNP 与以“ CNV ”开头的 SNP 分开,并为两种类型的 SNPS 及其对应的 Pi1 值中的每一种获取一个新矩阵。SNP 的名称都是随机的,因此“rs”或“CNV”将随机出现在列中。

我想我可能需要一个 for 循环来遍历 SNP 列中每个条目的前 2 个字符,但我不知道这是否正确。

4

2 回答 2

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
于 2013-06-21T09:39:25.840 回答
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 查找您的模式,“^”检查模式是否在开头。

于 2013-06-21T09:41:34.613 回答