我想寫一些代碼,有效地將數據框的第一列中的值向上或向下移動。它向上或向下移動的條件如下:如何將數據框的列中的值向上或向下移動?
1)如果數據框'playerlist'中選定元素正下方的值與所選元素的值之間的差值小於或等於在數據框中所選元素正上方的值與所選元素的值之間的差異,則第一列中的數據向上移動(即,玩家列表[1,1]變爲玩家列表[2,1],玩家列表[2, 1]變成播放列表[3,1]等)。 2)如果反過來是正確的,(即數據框'playerlist'中選擇元素正下方的值和所選元素的值之間的差值(僅)大於直接值之間的差值在數據框中所選元素的上方和所選元素的值),則數據向下移動(即,玩家列表[3,1]變成玩家列表[2,1],玩家列表[2,1]變成播放列表[1,1] ]等)。 3)如果上述值或選定元素值的下面值都小於選定值,則不會發生任何反應。
NB:
NUMBER_OF_PLAYERS *是一個外部輸入時,在下面的示例中,具有值7運行(即,這意味着playerlist包含7行
**拍攝X是的行。所選擇的數據(即這樣選擇的數據始終是playerlist [X,1])。
dicear <- function(x){ #x is the player playing the card
y <- x-1
z <- x+1
if(x <- 1){
y <- number_of_players
}
if(x <- number_of_players){
z <- 1
}
if(playerlist[x, 1]>playerlist[z, 1] & (playerlist[x, 1]-playerlist[z, 1]) >= (playerlist[x, 1] - playerlist[y, 1])){
for(i in 1:nrow(playerlist)){
dummy <- i+1
if(i <- nrow(playerlist)){
dummy <- 1
}
else{
dummy <- i+1
}
playerlist[i, 1] <<- playerlist[dummy, 1]
}
}
else {
if(playerlist[x, 1]>playerlist[y, 1] & (playerlist[x, 1]-playerlist[y, 1]>(playerlist[x, 1]-playerlist[z, 1]))){
for(i in 1:nrow(playerlist)){
dummy <- i-1
if(i <- 1){
dummy <- nrow(playerlist)
}
else{
dummy <- i-1
}
playerlist[i, 1] <<- playerlist[dummy, 1]
}
}
}
}
我不知道,我完全以下,但好像你正在試圖建立某種基於上面和下面的一些目標項目之間的差異排序算法。那是對的嗎? – giraffehere
此外,您的算法是否會在數據框的第一個和最後一個項都失敗? – giraffehere
問題是什麼? –