如何反转数值型向量的取值?R语言1-7等级反转实现求助
反转1-7取值向量的解决方案
最简洁高效的方法
直接用算术运算就能实现——因为1和7的和是8,2和6的和也是8,以此类推,每个值的反转结果就是8 - 原值:
df$PS <- 8 - df$PS
一行代码搞定,完全不存在逐个替换的冲突问题。
你之前单个替换失败的原因
如果先执行df$PS[df$PS==1] <-7,再执行df$PS[df$PS==7] <-1,会把刚刚从1改成7的数值又改回1,等于白操作。这是因为替换顺序不对,且这种逐个替换的方式本身容易出现覆盖问题。
用replace函数实现的正确方式
如果一定要用replace,可以先建立取值映射表再批量替换:
# 建立1→7、2→6……的映射关系 value_map <- c("1"=7, "2"=6, "3"=5, "4"=4, "5"=3, "6"=2, "7"=1) # 把向量转成字符匹配映射,再转回数值类型 df$PS <- as.numeric(value_map[as.character(df$PS)])
也可以用嵌套replace(但不如算术方法简洁,仅作参考):
df$PS <- replace( replace( replace( replace( replace( replace(df$PS, df$PS==1, 7), df$PS==2, 6), df$PS==3, 5), df$PS==5, 3), df$PS==6, 2), df$PS==7, 1) # 注:先处理1、2、3,再处理5、6、7,避开不需要修改的4(反转后仍是4)
验证示例
原向量第一个元素是2,执行8-2得到6,符合反转要求;原第三个元素是7,8-7得到1,完全正确。
内容的提问来源于stack exchange,提问作者user22985482
相关产品推荐
相关产品推荐

