考虑下面两种形式的字符串:
101001
010001
我如何在这两者之间进行OR并报告其数量?
我的目标是只为上面的两个字符串报告4。
非常感谢你的帮助
答案 0 :(得分:2)
这可能是一种更优雅的方式,但是这个怎么样:
x = "101001"
y = "010001"
dat = c(strsplit(x, split=""), strsplit(y, split=""))
sum(dat[[1]] == 1 | dat[[2]] == 1)
或者这个:
sum(unlist(strsplit(x, split="")) == 1 | unlist(strsplit(y, split="")) == 1)
或者,根据@jbaums评论:
sum(as.numeric(strsplit(x, '')[[1]]) | as.numeric(strsplit(y, '')[[1]]))
答案 1 :(得分:2)
如果您只处理二进制文件,则可以将字符串转换为数字,添加它们,并计算非零数。 (编辑合并朱利叶斯的推荐)
x = "101001"
y = "010001"
xy <- as.numeric(x) + as.numeric(y)
length(gregexpr("(1|2)", xy)[[1]])
你可以写这个也很容易在矢量上运行。
#* function to generate sample data
make_binary_string <- function(n = 10, len = 6)
{
vapply(1:n,
function(i, n, len) paste0(sample(0:1, 6, replace = TRUE), collapse = ""),
character(1),
n = n,
len = len)
}
set.seed(pi)
x <- make_binary_string(n = 10)
y <- make_binary_string(n = 10)
xy <- as.numeric(x) + as.numeric(y)
nchar(gsub("0", "", xy))
答案 2 :(得分:1)
这是我尝试过的。
df <- data.frame(strsplit(str1,split = ""), strsplit(str2,split = ""))
names(df) <- c('x1', 'x2')
这会将字符串转换为像这样的数据框
x1 x2
1 1 0
2 0 1
3 1 0
4 0 0
5 0 0
6 1 1
然后计算至少有一个1的行数
nrow(df[df$x1 == 1 | df$x2 == 1,])
或强>
sum(bitwOr(as.numeric(strsplit(str1,split = "")[[1]]) , as.numeric(strsplit(str2,split = "")[[1]])))
答案 3 :(得分:1)
我们可以定义一个函数#
,它将字符串转换为一系列布尔值:
to.bool()