【发布时间】:2020-10-20 20:57:29
【问题描述】:
我有一个矩阵,其中行中有多个个体,列中有多个核苷酸(值)。它看起来像这样:
[,1][,2][,3][,4] ...
ind1 a c a a
ind2 a c t t
ind3 a g g c
ind4 a g g g
.
.
.
现在我想忽略所有仅出现一个值的列(如上面第一列的示例),并用两个、三个和四个(不超过 4 个!)不同的核苷酸(值)转换每一列成二进制格式。最后应该是这样的:
[,1] [,2] [,3] ...
ind1 10 100 1000
ind2 10 010 0100
ind3 01 001 0010
ind4 01 001 0001
.
.
.
对我来说,如果有两个、三个或四个不同的值,获得相同的二进制代码才重要。 我已经在计算每列中出现了多少不同的值,但我不确定如何将值更改为二进制格式:
df <- apply(df, 2, function(x) length(unique(x)))
有人可以帮我吗?
【问题讨论】:
-
不清楚如何获得 '01' '10' 的预期输出,其中第一列的列值只是 'a'
-
不清楚预期的输出。可能是
library(pryr);apply(df[-1], 2, function(x) {n <- length(unique(x)); substr(pryr::bits(x), n, n + n-1)})