我在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。
谢谢。
答案 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