r - 将两个不同大小的 tbls 按一个因素连接起来,并将某个值的位置放在另一个中
问题描述
我正在尝试在 R 中加入两个不同大小的 tbl,但在以下点上有点卡住:
Tbl1:
A tibble: 27 x 2
Value1 Factor
<dbl> <fct>
1 0.39 10Y
2 0.39 10Y
3 0.17 10Y
4 0.17 10Y
5 0.11 10Y
6 0.11 10Y
7 0.03 10Y
8 0.03 15Y
9 11.9 15Y
10 11.9 15Y
Tbl2:
A tibble: 20 x 3
Factor Value2 Value3
<fct> <dbl> <dbl>
1 10Y 0 0.09
2 10Y 0 1.01
3 10Y 0.00500 5.01
4 10Y 0.014 10.0
5 15Y 0 0.17
6 15Y 0.001000 1.51
7 15Y 0.012 6.01
8 15Y 0.029 15.0
9 20Y 0 0.25
10 20Y 0.002 2.01
我想要做的是首先通过因子匹配它们,即“10Y”“15Y”等,然后在 Tbl2Value3 中选择最接近 Tbl1Value1 的值,并将 tbl2 中的某个 Value2 添加到 Tbl1 中的新列。
到目前为止,我尝试的是计算 tbl2 中这些值的索引。还尝试了 intersect() 来查找相交因子。
indices <- array()
for (i in 1:nrow(tbl1)){
indices[i] <- which(abs(tbl2$Value3 - tbls1$Value1[i])==min(abs(tbls2$Value3 - tbl1$Value1[i])))
}
有没有比 which() 更好的方法来找到这些值的位置?鉴于上述所有条件,我如何才能真正将两者结合在一起?
真的很期待你的想法!
非常感谢
PS:如果我的代码伤害了任何人的感受,我深表歉意......我只是在学习。谢谢
解决方案
或者,这可以使用滚动连接来解决,data.table
其中参数roll = "nearest"
请求为最后一个连接条件找到最接近的值Value3 = Value1
:
library(data.table)
library(magrittr)
result <-
setDT(Tbl2)[setDT(Tbl1), on = .(Factor, Value3 = Value1), roll = "nearest"] %>%
setnames("Value3", "Value1") %>% # clean up
setcolorder(c("Value1", "Factor"))
result
Value1 Factor Value2 1: 0.39 10Y 0.000 2: 0.39 10Y 0.000 3: 0.17 10Y 0.000 4: 0.17 10Y 0.000 5: 0.11 10Y 0.000 6: 0.11 10Y 0.000 7: 0.03 10Y 0.000 8: 0.03 15Y 0.000 9: 11.90 15Y 0.029 10: 11.90 15Y 0.029
数据
library(data.table)
Tbl1 <- fread("
rn Value1 Factor
1 0.39 10Y
2 0.39 10Y
3 0.17 10Y
4 0.17 10Y
5 0.11 10Y
6 0.11 10Y
7 0.03 10Y
8 0.03 15Y
9 11.9 15Y
10 11.9 15Y", drop = 1L)
Tbl2 <- fread("
rn Factor Value2 Value3
1 10Y 0 0.09
2 10Y 0 1.01
3 10Y 0.00500 5.01
4 10Y 0.014 10.0
5 15Y 0 0.17
6 15Y 0.001000 1.51
7 15Y 0.012 6.01
8 15Y 0.029 15.0
9 20Y 0 0.25
10 20Y 0.002 2.01", drop = 1L)
推荐阅读
- java - 如何使用 printf 分隔多个十进制数字并将所有这些数字四舍五入到小数点后 2 位
- php - 如何计算一个数组中的两个数据?
- meteor - Apollo / GraphQl - 单实体突变不更新缓存(数据库更新)
- php - 如何使用 PHP 从网站到网站传递主机名和安全密钥以进行验证
- rust - rust by example:闭包迭代器any给出E0308
- c++ - 在对集合内的向量的迭代中转换为非标量类型
- android-studio - 如何在我的 Macbook Pro 2013 16GB RAM 和 480GB SSD 上加速 Android Studio
- javascript - 悬停在链接上时如何反转整个页面的颜色
- python - 如何根据另一列中的唯一值对一列中的值进行分组?
- javascript - 无法在 php 中借出外部 CSS 和 JS 文件