R,从行和列中提取重复值,然后从二进制转换为整数

时间:2014-04-03 20:04:38

标签: r binary extract tostring

我在R中有一个表(没有标题):

1 1 1 0 0
1 1 1 0 0
0 0 0 1 1

我想要做的是从每一行和每列中提取连续的1,然后用这些1来创建一个字符串,最后将字符串转换为二进制的整数。

示例,假设我从第1行中提取连续1 - > 1 1 1,然后我从这些1s中创建一个字符串,最后将这个二进制值的字符串转换为n整数,结果应为7。

谢谢。

1 个答案:

答案 0 :(得分:0)

如果你可以假设你只有其他地方没有1的连续1,你可以这样做:

2 ^ rowSums(tab) - 1

例如:

tab <- as.table(matrix(c(1,1,1,0,0,1,1,1,0,0,0,0,0,1,1), nrow = 3, byrow = T))
2 ^ rowSums(tab) - 1
# A B C
# 7 7 3

如果您没有这种连续性假设,请使用行程编码:

-1 + 2 ^ apply(tab, 1, function(x) max(rle(x)$lengths[rle(x)$values == 1]))

然后示例是

tab <- as.table(matrix(c(0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,1), nrow = 3, byrow = T))

#   A B C D E F
# A 0 1 1 1 0 0
# B 0 1 1 1 0 0
# C 0 0 0 0 1 1 

以上再次产生

# A B C
# 7 7 3