根据存储在因子中的样本 ID 号对数据框进行子集化

Subsetting a data frame based on Sample ID numbers in stored in a factor

我的数据框由两列组成,一列包含我的样本 ID,另一列包含我的结果,如下所示:

   Sample.ID Conc.
1         B1 0.020885051
2         B2 0.002398214
3         B3 0.001343366
4         B4 0.001501216
5         B5 0.002057419
6         B6 0.200243098
7         B7 0.003307670
8         B8 0.001403119
9          1 0.003150129
10         2 0.014822015
11         3 0.012500499
12       St2 0.199572365
13         4 0.012261783
14         5 0.004802208
15         6 0.003964603
16       St4 0.990239557
17         7 0.077453817
18         8 0.059765216
19       St2 0.204757306
20         9 0.061966809

我想知道是否有一种简单的方法来对数据进行子集化,所以最后我为我的 B 有了单独的数据框:

Sample.ID Conc.
1         B1 0.020885051
2         B2 0.002398214
3         B3 0.001343366
4         B4 0.001501216
5         B5 0.002057419
6         B6 0.200243098
7         B7 0.003307670
8         B8 0.001403119

和我的号码

Sample.ID Conc.
1          1 0.003150129
2          2 0.014822015
3          3 0.012500499
4          4 0.012261783
5          5 0.004802208
6          6 0.003964603
7          7 0.077453817
8          8 0.059765216
9          9 0.061966809

最后是我的 St

Sample.ID Conc.
1        St2 0.199572365
2        St4 0.990239557
3        St2 0.204757306

感谢阅读到最后并提供帮助。

您可以使用 split() 拆分 data.frame,只要您的 ID 的格式为字母 - 然后 - 数字,您就可以使用 gsub 去除尾随数字作为在:

stringsPart <-gsub('[0-9]*$','',myData$Sample.ID)
listOfSubDataFrames <- split(myData,stringsPart)

顺便说一句,正则表达式匹配出现在字符串末尾($)的零个或多个(*)数字([0-9]),gsub替换它们带有空字符串 ('').