Estrella Spaans
Estrella Spaans

Reputation: 41

How do I replace specific values in dataframe colum with other specific values through a loop in R

I am trying to replace specific values in a data frame with specific values through a loop. I am kinda new to the world of R but I am a bit stuck:

top200$track.id[top200$track.id == "7ytR5pFWmSjzHJIeQkgog4"] <-
  "4Aykm3xrOFSHrAnv80KUhh"
top200$track.id[top200$track.id == "6thXB4RmajS4oZPNiBAKy0"] <-
  "3m0y8qLoznUYi73SUBP8GI"
top200$track.id[top200$track.id == "6OqrJqDMu15AGJHJazg9Nr"] <-
  "463CkQjx2Zk1yXoBuierM9"
top200$track.id[top200$track.id == "1rgnBhdG2JDFTbYkYRZAku"] <-
  "5ZULALImTm80tzUbYQYM9d"
top200$track.id[top200$track.id == "3apeXzypBMnUfYcZYNX6DH"] <-
  "37ZtpRBkHcaq6hHy0X98zn"
top200$track.id[top200$track.id == "6gBFPUFcJLzWGx4lenP6h2"] <-
  "2SzjMcZIsE2zUWQnccsTAo"
top200$track.id[top200$track.id == "513JwqDfENCJ0Woi0T42qy"] <-
  "6hci8n9UowepjRmCc6CKTv"
top200$track.id[top200$track.id == "13vDU8nPsvTGEVTMB8Vw7g"] <-
  "6AzKhCHOms83jvNVLsz0Bt"
top200$track.id[top200$track.id == "30VrBsh1STRBoIrhQOAwzK"] <-
  "2VOomzT6VavJOGBeySqaMc"
top200$track.id[top200$track.id == "79s5XnCN4TJKTVMSmOx8Ep"] <-
  "6PnTgx9lyvLGIcPnroCvc2"
top200$track.id[top200$track.id == "6i7zAdNhzUN2k1HcrBxPHG"] <-
  "14ngWWxvUSnIMXgF6rzSk1"
top200$track.id[top200$track.id == "1RSzyxqtIO4yX3EyiV4zT5"] <-
  "5vGLcdRuSbUhD8ScwsGSdA"
top200$track.id[top200$track.id == "4u7EnebtmKWzUH433cf5Qv"] <-
  "7tFiyTwD0nx5a1eklYtX2J"
top200$track.id[top200$track.id == "0jT8Nl0shPS8115is0wD2Q"] <-
  "0Snbzbd74RLfL0i4nn1vU5"
top200$track.id[top200$track.id == "3xgT3xIlFGqZjYW9QlhJWp"] <-
  "6Qs4SXO9dwPj5GKvVOv8Ki"
top200$track.id[top200$track.id == "24IgCW19L8lXKyFZwzFtD3"] <-
  "14wf185UxfNbSy8dwt4r4q"
top200$track.id[top200$track.id == "2xLMifQCjDGFmkHkpNLD9h"] <-
  "0u695M7KyzXaPIjpEbxOkB"

This is what I got so for looking at other examples, but it is still not really working. Any suggestions on how to do this?

new_values <- c("4Aykm3xrOFSHrAnv80KUhh","3m0y8qLoznUYi73SUBP8GI","463CkQjx2Zk1yXoBuierM9","5ZULALImTm80tzUbYQYM9d","37ZtpRBkHcaq6hHy0X98zn","2SzjMcZIsE2zUWQnccsTAo","6hci8n9UowepjRmCc6CKTv","6AzKhCHOms83jvNVLsz0Bt","2VOomzT6VavJOGBeySqaMc","6PnTgx9lyvLGIcPnroCvc2","14ngWWxvUSnIMXgF6rzSk1","5vGLcdRuSbUhD8ScwsGSdA","7tFiyTwD0nx5a1eklYtX2J","0Snbzbd74RLfL0i4nn1vU5","6Qs4SXO9dwPj5GKvVOv8Ki","14wf185UxfNbSy8dwt4r4q","0u695M7KyzXaPIjpEbxOkB")

old_values <- c("7ytR5pFWmSjzHJIeQkgog4","6thXB4RmajS4oZPNiBAKy0","6OqrJqDMu15AGJHJazg9Nr","1rgnBhdG2JDFTbYkYRZAku","3apeXzypBMnUfYcZYNX6DH","6gBFPUFcJLzWGx4lenP6h2","513JwqDfENCJ0Woi0T42qy","13vDU8nPsvTGEVTMB8Vw7g","30VrBsh1STRBoIrhQOAwzK","79s5XnCN4TJKTVMSmOx8Ep","6i7zAdNhzUN2k1HcrBxPHG","1RSzyxqtIO4yX3EyiV4zT5","4u7EnebtmKWzUH433cf5Qv","0jT8Nl0shPS8115is0wD2Q","3xgT3xIlFGqZjYW9QlhJWp","24IgCW19L8lXKyFZwzFtD3","2xLMifQCjDGFmkHkpNLD9h")


for i in top200$track.id {
  if top200$track.id[i] %in% old_values {
    old_values[i] <- new_values[i]
  }
}

Upvotes: 0

Views: 34

Answers (1)

tester
tester

Reputation: 1692

You don't need a loop for that. If you want, you can overwrite the old_values in the dataframe with the new_values, then you don't store the original values.

new_values <- c("4Aykm3xrOFSHrAnv80KUhh","3m0y8qLoznUYi73SUBP8GI","463CkQjx2Zk1yXoBuierM9","5ZULALImTm80tzUbYQYM9d","37ZtpRBkHcaq6hHy0X98zn","2SzjMcZIsE2zUWQnccsTAo","6hci8n9UowepjRmCc6CKTv","6AzKhCHOms83jvNVLsz0Bt","2VOomzT6VavJOGBeySqaMc","6PnTgx9lyvLGIcPnroCvc2","14ngWWxvUSnIMXgF6rzSk1","5vGLcdRuSbUhD8ScwsGSdA","7tFiyTwD0nx5a1eklYtX2J","0Snbzbd74RLfL0i4nn1vU5","6Qs4SXO9dwPj5GKvVOv8Ki","14wf185UxfNbSy8dwt4r4q","0u695M7KyzXaPIjpEbxOkB")
old_values <- c("7ytR5pFWmSjzHJIeQkgog4","6thXB4RmajS4oZPNiBAKy0","6OqrJqDMu15AGJHJazg9Nr","1rgnBhdG2JDFTbYkYRZAku","3apeXzypBMnUfYcZYNX6DH","6gBFPUFcJLzWGx4lenP6h2","513JwqDfENCJ0Woi0T42qy","13vDU8nPsvTGEVTMB8Vw7g","30VrBsh1STRBoIrhQOAwzK","79s5XnCN4TJKTVMSmOx8Ep","6i7zAdNhzUN2k1HcrBxPHG","1RSzyxqtIO4yX3EyiV4zT5","4u7EnebtmKWzUH433cf5Qv","0jT8Nl0shPS8115is0wD2Q","3xgT3xIlFGqZjYW9QlhJWp","24IgCW19L8lXKyFZwzFtD3","2xLMifQCjDGFmkHkpNLD9h")

top200 <- data.frame('a_column' = NA, old_values, check.names = F)
top200 <- rbind(top200, rnorm(2))

index <- top200$old_values %in% old_values

top200$old_values_replaced[index] <- new_values 

> head(top200)
  a_column             old_values    old_values_replaced
1       NA 7ytR5pFWmSjzHJIeQkgog4 4Aykm3xrOFSHrAnv80KUhh
2       NA 6thXB4RmajS4oZPNiBAKy0 3m0y8qLoznUYi73SUBP8GI
3       NA 6OqrJqDMu15AGJHJazg9Nr 463CkQjx2Zk1yXoBuierM9
4       NA 1rgnBhdG2JDFTbYkYRZAku 5ZULALImTm80tzUbYQYM9d
5       NA 3apeXzypBMnUfYcZYNX6DH 37ZtpRBkHcaq6hHy0X98zn
6       NA 6gBFPUFcJLzWGx4lenP6h2 2SzjMcZIsE2zUWQnccsTAo

Upvotes: 1

Related Questions