两个字符串之间的OR,0,1和#

时间:2016-01-09 06:23:51

标签: r

考虑下面两种形式的字符串:

101001
010001

我如何在这两者之间进行OR并报告其数量?

我的目标是只为上面的两个字符串报告4。

非常感谢你的帮助

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()