我有一个包含此数据的数据框。
# A tibble: 20 x 3
# Groups: CpG, Group [20]
CpG Group Range
<fct> <dbl> <dbl>
1 cg01003813 1. 0.971
2 cg01003813 2. 0.0917
3 cg01003813 3. 0.0535
4 cg01003813 4. 0.0627
5 cg01003813 5. 0.0575
6 cg26484667 1. 0.0768
7 cg26484667 2. 0.104
8 cg26484667 3. 0.0735
9 cg26484667 4. 0.0453
10 cg26484667 5. 0.139
11 cg25296477 1. 0.0745
12 cg25296477 2. 0.130
13 cg25296477 3. 0.0772
14 cg25296477 4. 0.131
15 cg25296477 5. 0.0765
16 cg13176022 1. 0.0895
17 cg13176022 2. 0.0236
18 cg13176022 3. 0.0412
19 cg13176022 4. 0.0478
20 cg13176022 5. 0.0346
然后我展开了数据框,以便它看起来我希望矩阵看起来如何:
> tidyr::spread(test, Group, Range, fill = 0)
# A tibble: 4 x 6
# Groups: CpG [4]
CpG `1` `2` `3` `4` `5`
<fct> <dbl> <dbl> <dbl> <dbl> <dbl>
1 cg01003813 0.971 0.0917 0.0535 0.0627 0.0575
2 cg13176022 0.0895 0.0236 0.0412 0.0478 0.0346
3 cg25296477 0.0745 0.130 0.0772 0.131 0.0765
4 cg26484667 0.0768 0.104 0.0735 0.0453 0.1390
现在我被卡住了。我无法弄清楚如何将其转换为格式正确且带标签的矩阵。
我希望我的5个组作为列标题(就像它们一样)。我希望CpG作为行名(目前它们是第一列。 我只是想不出如何把它变成一个正确标记的矩阵。
感谢您的支持。
答案 0 :(得分:1)
xtabs
让您更接近您想要的内容:
set.seed(1)
(foo <- cbind(expand.grid(CpG=letters[1:4], Group=1:5), Range = runif(20)))
#> CpG Group Range
#> 1 a 1 0.26550866
#> 2 b 1 0.37212390
#> 3 c 1 0.57285336
#> 4 d 1 0.90820779
#> 5 a 2 0.20168193
#> 6 b 2 0.89838968
#> 7 c 2 0.94467527
#> 8 d 2 0.66079779
#> 9 a 3 0.62911404
#> 10 b 3 0.06178627
#> 11 c 3 0.20597457
#> 12 d 3 0.17655675
#> 13 a 4 0.68702285
#> 14 b 4 0.38410372
#> 15 c 4 0.76984142
#> 16 d 4 0.49769924
#> 17 a 5 0.71761851
#> 18 b 5 0.99190609
#> 19 c 5 0.38003518
#> 20 d 5 0.77744522
xtabs(Range ~ Group + CpG, foo)
#> CpG
#> Group a b c d
#> 1 0.26550866 0.37212390 0.57285336 0.90820779
#> 2 0.20168193 0.89838968 0.94467527 0.66079779
#> 3 0.62911404 0.06178627 0.20597457 0.17655675
#> 4 0.68702285 0.38410372 0.76984142 0.49769924
#> 5 0.71761851 0.99190609 0.38003518 0.77744522
答案 1 :(得分:1)
只需将其转换为如下所示的矩阵
import re
import timeit
def create_simple_regex(lookup):
return re.compile(lookup)
def create_complex_regex(lookups):
return re.compile('|'.join(lookups))
def look_with_simple(lookups, word):
return [create_simple_regex(lookup).findall(word) for lookup in lookups]
def look_with_complex(lookups, word):
return create_complex_regex(lookups).findall(word)
lookups = list('abcdefghijklmnopqrstuvwxyz')
word = 'hello world!' * 1000
print(timeit.timeit('look_with_simple(lookups, word)', number=1000, globals=globals()))
print(timeit.timeit('look_with_complex(lookups, word)', number=1000, globals=globals()))