R语言ifelse比较逻辑错误求助:所有分类结果均为Positive
问题原因与解决方法
问题根源
你在ifelse判断中用单引号'Income-to-Debt'指代列名,这会被R识别为字符串字面量,而非数据框中的目标列。当执行'Income-to-Debt' >= 0时,R会尝试将字符串转换为数值,结果返回NA;而ifelse遇到NA条件时,会默认返回第一个分支的结果(即'Positive'),导致所有行都被错误标记。
修正方案
对于包含连字符这类特殊字符的列名,需用反引号(`)包裹来正确引用,或使用dplyr的.data代词明确指定列:
方案1:反引号包裹列名
df <- source_df %>% mutate(Pos_Neg = ifelse(`Income-to-Debt` >= 0, 'Positive', 'Negative'))
方案2:使用.data代词
df <- source_df %>% mutate(Pos_Neg = ifelse(.data[['Income-to-Debt']] >= 0, 'Positive', 'Negative'))
正确结果示例
执行修正后的代码后,数据框将得到符合预期的分类:
Id State_Name Income-to-Debt Pos_Neg 1 Alaska 1.24560987622 Positive 2 Alaska -2.52225746912 Negative 3 Alabama 1.35606080600 Positive 4 Michigan -1.89243582052 Negative 5 Ohio 2.56434636363 Positive 6 Idaho 0.00000000000 Positive
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

