R语言比较含NA的评分列 实现NA与数值差异标记为1的方法
R 两列评分差异对比(含NA特殊处理)
你可以通过以下两种方式修改代码实现需求:
方法1:case_when实现(可读性最高)
library(dplyr) df %>% mutate(diff_SZ = case_when( # 两列均为NA时保留NA is.na(SZ) & is.na(SZ_ptak) ~ NA_integer_, # 两列有效值相等时返回0 SZ == SZ_ptak ~ 0L, # 其余所有场景(值不等、仅一列是NA)都返回1 TRUE ~ 1L ))
方法2:逻辑运算简写(代码更简洁)
利用异或运算判断仅单列为NA的场景,叠加原有相等判断逻辑即可:
df %>% mutate(diff_SZ = +( (SZ != SZ_ptak) | xor(is.na(SZ), is.na(SZ_ptak)) ))
运行输出结果
和你期望的效果完全一致:
SZ SZ_ptak diff_SZ 1 1 1 0 2 1 1 0 3 NA NA NA 4 0 NA 1 5 NA NA NA 6 1 1 0 7 1 0 1
内容的提问来源于stack exchange,提问作者Chris Ruehlemann
相关产品推荐
相关产品推荐

