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
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