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