In the below example, userids
is my reference data frame and userdata
is the data frame where the replacements should take place.
> userids <- data.frame(USER=c('Ann','Jim','Lee','Bob'),ID=c(1,2,3,4))
> userids
USER ID
1 Ann 1
2 Jim 2
3 Lee 3
4 Bob 4
> userdata <- data.frame(INFO=c('foo','bar','foo','bar'), ID=c('Bob','Jim','Ann','Lee'),AGE=c('43','33','53','26'), FRIENDID=c('Ann',NA,'Lee','Jim'))
> userdata
INFO ID AGE FRIENDID
1 foo Bob 43 Ann
2 bar Jim 33 NA
3 foo Ann 53 Lee
4 bar Lee 26 Jim
How do I replace ID and FRIENDID in userdata
with the ID corresponding to USER in userids
?
The desired output:
INFO ID AGE FRIENDID
1 foo 4 43 1
2 bar 2 33 NA
3 foo 1 53 3
4 bar 3 26 2
Replace column values based on checking logical conditions in R DataFrame is pretty straightforward. All you need to do is select the column vector you wanted to update and use the condition within [] . The following example demonstrates how to update DataFrame column values by checking conditions on a numeric column.
Use match
:
userdata$ID <- userids$ID[match(userdata$ID, userids$USER)]
userdata$FRIENDID <- userids$ID[match(userdata$FRIENDID, userids$USER)]
This is a possibility:
library(qdap)
userdata$FRIENDID <- lookup(userdata$FRIENDID, userids)
userdata$ID <- lookup(userdata$ID, userids)
or to win the one line prize:
userdata[, c(2, 4)] <- lapply(userdata[, c(2, 4)], lookup, key.match=userids)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With