r - 将二进制字符串转换为十进制

标签 r

我有一个关于从二进制到十进制的数据转换的问题。假设我有一个像这样的二进制模式:

pattern<-do.call(expand.grid, replicate(5, 0:1, simplify=FALSE))
pattern
   Var1 Var2 Var3 Var4 Var5
1     0    0    0    0    0
2     1    0    0    0    0
3     0    1    0    0    0
4     1    1    0    0    0
5     0    0    1    0    0
6     1    0    1    0    0
7     0    1    1    0    0
8     1    1    1    0    0
9     0    0    0    1    0
10    1    0    0    1    0
11    0    1    0    1    0
12    1    1    0    1    0
13    0    0    1    1    0
14    1    0    1    1    0
15    0    1    1    1    0
16    1    1    1    1    0
17    0    0    0    0    1
18    1    0    0    0    1
19    0    1    0    0    1
20    1    1    0    0    1
21    0    0    1    0    1
22    1    0    1    0    1
23    0    1    1    0    1
24    1    1    1    0    1
25    0    0    0    1    1
26    1    0    0    1    1
27    0    1    0    1    1
28    1    1    0    1    1
29    0    0    1    1    1
30    1    0    1    1    1
31    0    1    1    1    1
32    1    1    1    1    1

我想知道在 R 中将每一行转换为十进制值的最简单方法是什么?和对比。如:

00000->0
10000->16
...
01111->15

最佳答案

尝试:

res <- strtoi(apply(pattern,1, paste, collapse=""), base=2)
res
#[1]  0 16  8 24  4 20 12 28  2 18 10 26  6 22 14 30  1 17  9 25  5 21 13 29  3
#[26] 19 11 27  7 23 15 31

您可以尝试将intToBits转换回二进制:

 pat2 <- t(sapply(res, function(x) as.integer(rev(intToBits(x)))))[,28:32]
 pat1 <- as.matrix(pattern)
 dimnames(pat1) <- NULL
identical(pat1, pat2)
#[1] TRUE

关于r - 将二进制字符串转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26167538/

相关文章:

在 C 中从 R 包调用 C 代码

R 我可以将 .rds 文件用于包中的数据吗?

r - 尝试访问 h_elp 时 emacs ess 崩溃

list - 索引嵌套列表/环境的有效(或最有效)方法是什么?

r - 在 R 中安装 Tensorflow 时出错

r - 用dplyr总结一个因子的计数

r - 从 R 中的许多列中减去数据框中的一列

r - 在 ggplot 中注释分组箱线图 - 在箱线图下方添加观察数量

r - 有没有办法将数据框的列与完整列名的向量相匹配?

r - 如何使用 write.xlsx 对 R 中创建的 Excel 文件进行密码保护?