R语言基于多列条件新增指定位置YES/NO列的问题求解
原有代码错误原因
- 误用
select()函数:select()的作用是选择数据框的列,不能在select()内部写SURREY >7、KENT ==2这类值判断逻辑,这类写法属于语法错误,无法返回正确的布尔判断结果。 - 逻辑运算维度不匹配:直接对多个不同维度的
select()返回结果用|做或运算,会出现维度不匹配的报错,即使不报错也会得到错误的布尔值。 - 判断逻辑不严谨:
rowSums()返回的是数值型结果,ifelse()的判断条件需要明确判断行和是否大于0,虽然R会自动将非0数值转为TRUE,但写法不严谨且容易因为前面的错误得到不符合预期的结果。
正确实现方案
推荐直接用dplyr的列直接判断写法,逻辑清晰易读,不容易出错:
首先确保加载dplyr包:library(dplyr)
运行如下代码即可:
DATA2 <- DATA %>% mutate( NEW_COL = if_else( DERBY > 7 | NEWCASTLE > 7 | SURREY > 7 | KENT == 2 | HULL == 2, "YES", "NO" ), .before = 2 )
如果后续判断列较多需要扩展,也可以用rowSums的规范写法:
DATA2 <- DATA %>% mutate( NEW_COL = if_else( rowSums( data.frame(DERBY >7, NEWCASTLE >7, SURREY >7, KENT ==2, HULL ==2), na.rm = TRUE ) > 0, "YES", "NO" ), .before = 2 )
内容的提问来源于stack exchange,提问作者lofus77
相关产品推荐
相关产品推荐

