R 条件语句;创建新的二进制变量

R 条件语句;创建新的二进制变量,r,conditional,R,Conditional,我有一对二进制变量(1和0),我的教授希望我创建一个新的二进制变量,如果前面的两个变量都有值1(即x,y=1),则取值1,否则取值0 我在R怎么做 谢谢! JMC有一个示例,其中包含一些示例数据: set.seed(1) A <- sample(0:1, 10, replace = TRUE) B <- sample(0:1, 10, replace = TRUE) A # [1] 0 0 1 1 0 1 1 1 1 0 B # [1] 0 0 1 0 1 0 1 1 0 1

我有一对二进制变量(1和0),我的教授希望我创建一个新的二进制变量,如果前面的两个变量都有值1(即x,y=1),则取值1,否则取值0

我在R怎么做

谢谢!
JMC有一个示例,其中包含一些示例数据:

set.seed(1)
A <- sample(0:1, 10, replace = TRUE)
B <- sample(0:1, 10, replace = TRUE)
A
#  [1] 0 0 1 1 0 1 1 1 1 0
B
#  [1] 0 0 1 0 1 0 1 1 0 1

as.numeric(A + B == 2)
#  [1] 0 0 1 0 0 0 1 1 0 0

as.numeric(rowSums(cbind(A, B)) == 2)
#  [1] 0 0 1 0 0 0 1 1 0 0

as.numeric(A == 1 & B == 1)
# [1] 0 0 1 0 0 0 1 1 0 0
set.seed(1)

A谢谢!我不熟悉rowSums()函数,它使问题变得容易得多。我很感兴趣的是,您以这种方式处理问题。看起来我已经见过很多次了。我认为
ifelse()
更直观,特别是如果有人在来到R之前有一些基本的编程(不是批评)。您喜欢这些类型的解决方案有一个简单的原因吗?@gung,因为R是矢量化的,而且这些方法可能更快:-)不是
ifelse()
矢量化的吗?我以为是的。我知道
if(){…}else{…}
没有矢量化,&我尽量不使用它。@gung,我现在出去了,但稍后会用一些基准更新。我似乎还记得一个关于这件事的问题,所以我会尽力帮你找到。
set.seed(1)
A <- sample(0:1, 1e7, replace = TRUE)
B <- sample(0:1, 1e7, replace = TRUE)

fun1 <- function() ifelse(A == 1 & B == 1, 1, 0)
fun2 <- function() as.numeric(A + B == 2)
fun3 <- function() as.numeric(A & B)
fun4 <- function() as.numeric(A == 1 & B == 1)
fun5 <- function() as.numeric(rowSums(cbind(A, B)) == 2)

library(microbenchmark)
microbenchmark(fun1(), fun2(), fun3(), fun4(), fun5(), times = 5)
# Unit: milliseconds
#   expr       min        lq    median        uq        max neval
# fun1() 4842.8559 4871.7072 5022.3525 5093.5932 10424.6589     5
# fun2()  220.8336  220.9867  226.1167  229.1225   472.4408     5
# fun3()  440.7427  445.9342  461.0114  462.6184   488.6627     5
# fun4()  604.1791  613.9284  630.4838  645.2146   682.4689     5
# fun5()  373.8088  373.8532  373.9460  435.0385  1084.6227     5