如何将r的dataframe列的值替换为其他dataframe列

时间:2016-07-30 10:13:11

标签: r dataframe merge

我在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

请帮忙。

3 个答案:

答案 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"