在R语言中基于两个二元变量创建或逻辑新变量的方法
问题描述
现有如下数据集:
> dput(test) structure(list(Apple = c(0L, 1L, 1L, 0L, 1L), Banana = c(1L, 1L, 0L, 0L, 0L)), class = "data.frame", row.names = c(NA, -5L ))
需要创建一个二元变量Apple_or_Banana,规则如下:
- 若Apple和Banana均为0,新变量取0;
- 若Apple和Banana其中一个为1(或两者都为1),新变量取1。
预期输出:
> dput(test) structure(list(Apple = c(0L, 1L, 1L, 0L, 1L), Banana = c(1L, 1L, 0L, 0L, 0L), Apple_or_Banana = c(1L, 1L, 1L, 0L, 1L)), class = "data.frame", row.names = c(NA, -5L))
解决方案
方法1:逻辑运算转换
利用逻辑或|直接判断,再转为整数类型:
test$Apple_or_Banana <- as.integer(test$Apple | test$Banana)
逻辑或运算会在任意一个变量为1时返回TRUE,否则返回FALSE,as.integer()将TRUE转为1、FALSE转为0,完全匹配需求。
方法2:行求和判断
因两个变量都是0/1取值,行求和后大于0则对应新变量为1,否则为0:
test$Apple_or_Banana <- as.integer(rowSums(test) > 0)
仅当两个变量都为0时行和为0,其余情况和≥1,通过>0转为逻辑值再转整数即可。
方法3:ifelse条件判断
直接按规则编写条件语句:
test$Apple_or_Banana <- ifelse(test$Apple == 0 & test$Banana == 0, 0, 1)
明确指定:当两者都为0时赋值0,其余所有情况赋值1。
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

