2016-07-30 118 views
1

我有以下中的R如何更换与其他数据帧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 

我要替换的交易值在数据帧第一个数据帧,所以它看起来像下面

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

为什么不简单地''df1 $ Transaction_Type < - df2 [match(df1 $ Transaction_Type,df2 $ Transaction_Type),1]'? –

回答

1

我们可以使用matchbase 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" 
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

假设第一个数据帧是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