如何根据 R 中的另一个数据帧解码一个数据帧中变量的值?

Posted

技术标签:

【中文标题】如何根据 R 中的另一个数据帧解码一个数据帧中变量的值?【英文标题】:How do I decode the values of the variable in one dataframe based on another dataframe in R? 【发布时间】:2022-01-20 14:12:05 【问题描述】:

我在 R 中遇到以下问题。我有一个第一个数据框,其中有一个变量指示向特定公司提供贷款的 ID 代码,我有第二个数据框,其中有一列包含贷款的 ID 代码和一列每个公司的名称(因此将 ID 代码与特定名称相关联)。这两个数据框的长度与第一个列出特定时间段内相关银行贷款的长度不同,因此相同的 ID 多次出现,格式如下:

Data1 <- data.frame(x <- c(1, 2, 2, 2, 3, 3, 4, 5, 5, 5), y <- (runif(10)*100))
colnames(junk) <- c("Loan ID", "Loan Amount")

    Loan ID Loan Amount
1        1   93.548552
2        2   22.751827
3        2    8.751289
4        2   29.347396
5        3   97.583019
6        3   32.638592
7        4   67.498956
8        5   78.206820
9        5   78.786014
10       5   42.112703

而第二个(我们称之为 Data2)本质上是这样的:

Data2 <- data.frame(x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), y <- c("name1", "name2", "name2", "name3", 
                                                                  "name4", "name5", "name6", "name6",
                                                                  "name6", "name7"))
colnames(Data2) <- c("Loan ID", "Firm Name")

   Loan ID   Firm Name
1        1   name 1
2        2   name 2
3        3   name 2
4        4   name 3
5        5   name 4
6        6   name 5
7        7   name 6
8        8   name 6
9        9   name 6
10       10  name 7

您可以看到多个 ID 链接回一个公司名称,因为在不同的时间点,公司名称与不同的业务相关联。

基本上我想要做的是使用 Data2 将 Data1 中的 ID 更改为 Data2 中的公司名称。我尝试的是在从 Data2 创建的列表中使用解码器包中的解码,例如:

Keys <- setNames(as.list(Data2$FirmName), Data2$LoanID)

decode(Data1$LoanID, Keys)

这不起作用,因为每个键都具有相同的值(即对应于相同的名称)。我不确定如何解决这个问题,而且我无法手动将 ID 更改为名称,因为在我的数据集中我有数千个观察结果。重申我想要实现的是,如果在数据 1 中贷款 ID 为 1,则替换为名称 1,如果 ID 为 2,则替换为名称 2,如果为 3,则替换为名称 2等等。

【问题讨论】:

【参考方案1】:

听起来您对左连接感兴趣,通过merge 在 R 中实现:

Data1 <- data.frame(loan_id = c(1, 2, 2, 2, 3, 3, 4, 5, 5, 5), 
                    amount = (runif(10)*100))
Data2 <- data.frame(loan_id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 
                    y = c("name1", "name2", "name2", "name3", 
                          "name4", "name5", "name6", "name6",
                          "name6", "name7"))
merge(Data1, Data2)
   loan_id     amount     y
1        1 73.4713285 name1
2        2 51.1956226 name2
3        2 57.2294079 name2
4        2 24.3442836 name2
5        3 70.6357522 name2
6        3 67.2642131 name2
7        4  7.6427665 name3
8        5  0.3323552 name4
9        5 36.5309370 name4
10       5 71.3172913 name4

【讨论】:

非常感谢 - 这比我尝试过的所有其他方法都容易,而且成功了!

以上是关于如何根据 R 中的另一个数据帧解码一个数据帧中变量的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据一个数据帧中的列值和R中另一个数据帧的列标题名称有条件地创建新列

如何根据 Python 中的另一个数据框过滤掉行? [复制]

如何创建一列数组,其值来自一列并且它们的长度来自pyspark数据帧中的另一列?

R:从一个数据帧中提取行,基于列名匹配来自另一个数据帧的值

根据条件替换R数据帧中的值[重复]

如何根据第二个数据帧映射第一个数据帧中的值?