data.frame 1-5中的所有变量都处于相同的比例。
data.frame
的示例rpi_invert
A B C D
5 2 4 1
3 5 5 2
1 1 3 4
对于所有等于5
的值,我想将其更改为1
。
4
更改为2
。
2
更改为4
。
1
更改为5
。
更改值后的data.frame示例。
rpi_invert
A B C D
1 4 2 5
3 1 1 4
5 5 3 2
我累了。
for(b in colnames(rpi_invert)){
rpi_invert[[b]][rpi_invert[[b]] == 5] <- 1
rpi_invert[[b]][rpi_invert[[b]] == 4] <- 2
rpi_invert[[b]][rpi_invert[[b]] == 2] <- 4
rpi_invert[[b]][rpi_invert[[b]] == 1] <- 5
}
这只会更改第一行而不是第二列的值。
for(b in colnames(rpi_invert)){
rpi_invert <- ifelse(rpi_invert[[b]] == 5,1,
ifelse(rpi_invert[[b]] == 4,2,
ifelse(rpi_invert[[b]] == 2,4,
ifelse(rpi_invert[[b]] == 1,5,rpi_invert[[b]]))))
}
但这给了我错误:
Error in rpi_invert[[b]] : subscript out of bounds
如果我为单个列尝试相同的方法而不是循环遍历data.frame,那么这两种方法都有效,所以我不确定是什么问题。
我确信我想要做的事情可以更有效率地完成而不需要for loop
可能具有某种类型的应用功能,但我不确定如何。
如果需要进一步的信息,请与我们联系。
答案 0 :(得分:8)
您可以尝试(如果您的data.frame是df
):
3-(df-3)
# A B C D
#1 1 4 2 5
#2 3 1 1 4
#3 5 5 3 2
或者,但有点不同:6-df