R - 使用 for 循环有条件地更改数据框中的值

R - Using for loop to conditionally change values in a dataframe

data.frame1-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 的情况下更有效地完成,可能使用某种类型的应用功能,但我不确定如何。

如果需要更多信息,请告诉我任何帮助。

你可以试试(如果你的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