1
所有变量在data.frame 1-5中的规模相同。的data.frameR - 使用for循环来有条件地更改数据帧中的值
rpi_invert
A B C D
5 2 4 1
3 5 5 2
1 1 3 4
对于等于5
所有值我想将其改为1
实施例。
对于4
更改为2
。对于2
变更为4
。
for 1
change to 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
可能与某些类型的应用函数,但我不知道如何。
任何帮助将不胜感激请让我知道,如果需要进一步的信息。
这真是聪明。 – nrussell
@Cath这很棒!你的方式更有效率。如果可能的话,你是否明白为什么我的循环未能做到我想让他们做的事情?如果不是,我相信我可以做更多的研究,以更好地理解循环。 – Dre
@Dre,在你的第一个for循环中,你用前两行改变'5'和'4'的值为'1'和'2',但是你将'1'和'2'改回到最后2行是'5'和'4',所以无法工作。在你的第二个for循环中,有几个问题,嵌入式ifelse太多了,但是导致错误的原因是你在每个“循环”而不是仅仅列'rpi_invert [[b]]中重新分配完整的df ' – Cath