如何根据 R 中的另一个数据帧解码一个数据帧中的变量值?
How do I decode the values of the variable in one dataframe based on another dataframe in R?
我在 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 link 回到一个公司名称,因为在不同的时间点,公司的名称被 link 编辑到不同的操作。
基本上我想做的是使用 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等等。
听起来您对左连接感兴趣,通过 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 中遇到以下问题。我有第一个数据框,其中有一个变量指示特定公司贷款的 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 link 回到一个公司名称,因为在不同的时间点,公司的名称被 link 编辑到不同的操作。
基本上我想做的是使用 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等等。
听起来您对左连接感兴趣,通过 merge
:
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