如何在DataFrame中新增列:仅当两列值均为1时取1,否则取0
解决方案
针对你的需求,有几种简单直接的方法可以实现,完全没必要用grepl(这个函数是用来做字符串匹配的,不适合处理数值型的逻辑判断):
- 方法一:直接数值相乘
因为你的两列都是0或1,只有当两者都为1时乘积才是1,其他情况都是0,完美符合需求:
# 先构造你的示例数据框 df <- data.frame(Wet = c(1,0,0,1,1,0), Cold = c(1,1,1,0,1,0)) # 新增目标列 df$`wet&cold` <- df$Wet * df$Cold
- 方法二:逻辑判断转整数
通过逻辑运算符&判断两列是否同时为1,再把逻辑值(TRUE/FALSE)转为整数(1/0):
df$`wet&cold` <- as.integer(df$Wet == 1 & df$Cold == 1)
- 方法三:用dplyr包(适合tidyverse工作流)
如果你习惯用tidyverse系列工具,可以这样写:
library(dplyr) df <- df %>% mutate(`wet&cold` = as.integer(Wet & Cold))
执行后你的数据框会变成:
Wet Cold wet&cold 1 1 1 1 2 0 1 0 3 0 1 0 4 1 0 0 5 1 1 1 6 0 0 0
内容的提问来源于stack exchange,提问作者Vlad Zaha
相关产品推荐
相关产品推荐

