我在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
我的其他数据框正在关注
Transaction Transaction_Type
CARD 1
CASH 2
VOUCHER 3
我想替换第一个数据帧中的Transaction值,因此它将如下所示
Amount Transaction_Type
62.81 CARD
6.66 CASH
19.9 VOUCHER
24.02 CASH
24.02 CASH
45.2 CARD
19.76 VOUCHER
请帮忙。
答案 0 :(得分:2)
使用R的merge
方法很容易做到。在您的示例中:
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))
如果您运行以下内容:merge(a,t,by="Transaction_Type")
您将输出所需的结构:
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
当然,之后您可以保留所需的列。
希望这有帮助。
答案 1 :(得分:1)
假设第一个数据帧是df1
,第二个数据帧是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
答案 2 :(得分:1)
我们可以使用match
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"
或另一个base R
选项是
unname(with(df2, setNames(Transaction, Transaction_Type))[as.character(df1$Transaction_Type)])
#[1] "CARD" "CASH" "VOUCHER" "CASH" "CASH" "CARD" "VOUCHER"