Reputation: 8247
I have following data frame in R
Amount Transaction_Type
62.81 1
6.66 2
19.9 3
24.02 2
24.02 2
45.2 1
19.76 3
The other dataframe I have is following
Transaction Transaction_Type
CARD 1
CASH 2
VOUCHER 3
I want to replace Transaction values in the first dataframe,so it will look like following
Amount Transaction_Type
62.81 CARD
6.66 CASH
19.9 VOUCHER
24.02 CASH
24.02 CASH
45.2 CARD
19.76 VOUCHER
Please help.
Upvotes: 1
Views: 55
Reputation: 887501
We can use match
from base R
df1$Transaction_Type <- df2$Transaction[match(df1$Transaction_Type,
df2$Transaction_Type)]
df1$Transaction_Type
#[1] "CARD" "CASH" "VOUCHER" "CASH" "CASH" "CARD" "VOUCHER"
Or another base R
option is
unname(with(df2, setNames(Transaction, Transaction_Type))[as.character(df1$Transaction_Type)])
#[1] "CARD" "CASH" "VOUCHER" "CASH" "CASH" "CARD" "VOUCHER"
Upvotes: 1
Reputation: 4965
Assuming the first dataframe is df1
, and the second is df2
:
library(dplyr)
left_join(df1, df2, by = "Transaction_Type") %>% select(-Transaction_Type)
# Amount Transaction
#1 62.81 CARD
#2 6.66 CASH
#3 19.90 VOUCHER
#4 24.02 CASH
#5 24.02 CASH
#6 45.20 CARD
#7 19.76 VOUCHER
Upvotes: 1
Reputation: 3297
This is easy to do using the merge
method of R. In your example:
a=data.frame( "Amount"=c(62.81,6.66,19.9,24.02,24.02,45.2,19.76), "Transaction_Type"=c(1,2,3,2,2,1,3)) t=data.frame( "Transaction"=c("CARD","CASH","VOUCHER"), "Transaction_Type"=c(1,2,3))
if you run the following: merge(a,t,by="Transaction_Type")
you will output the structure you want:
Transaction_Type Amount Transaction 1 1 62.81 CARD 2 1 45.20 CARD 3 2 6.66 CASH 4 2 24.02 CASH 5 2 24.02 CASH 6 3 19.90 VOUCHER 7 3 19.76 VOUCHER
Of course afterwards, you can keep the columns you want.
Hope this helps.
Upvotes: 2