indexing - 给定一个向量中的标准和第二个向量中的值,在第三个向量中找到最接近的值,但在第四个向量中报告相应的值
问题描述
我有两个数据框。
dfx <- data.frame(ID=c("A", "A", "A", "B", "B", "B", "B", "B", "B"),
a=c( 0.1, 2.1, 1.5, 1.8, 8, 1, 1.4, 39, 100))
ID a
1 A 0.1
2 A 2.1
3 A 1.5
4 B 1.8
5 B 8.0
6 B 1.0
7 B 1.4
8 B 39.0
9 B 100.0
dfy<-data.frame(ID=c("A", "A", "A", "B", "B", "C", "C", "D"),
aa=c(0.5, 1, 2, 5, 10, 20, 40, 80),
bb=c(1, -1, 20, -5, 10, 20, 40, 80))
ID aa bb
1 A 0.5 1
2 A 1.0 -1
3 A 2.0 20
4 B 5.0 -5
5 B 10.0 10
6 C 20.0 20
7 C 40.0 40
8 D 80.0 80
我正在寻找一种在 dfx 中创建新变量的方法,使用每行中的 ID 和“a”中的值来查找特定于 ID 的“bb”,使用“aa”中相对于“a”的最接近的值”。例如,对于第一行,返回的答案将为 1(“aa”中最接近 a = 0.1 的“A”值为 0.5,对应于 bb = 1)。第二行的答案是 20。
我看过很多关于 sapply 和 which.min 的例子,但是我找不到任何可以帮助我解决这类问题的东西。有什么建议吗?
解决方案
我找到了解决方案
library(data.table)
dtx<-as.data.table(dfx)
dty<-as.data.table(dfy)
setkeyv(dtx,c("ID","a"))
setkeyv(dty,c("ID","aa"))
dtx$ID<-as.character(dtx$ID)
dtx$a<-as.double(dtx$a)
dty$ID<-as.character(dty$ID)
dty$aa<-as.double(dty$aa)
newtable<-dty[dtx,on=c(ID="ID",aa="a"),roll="nearest"]
names(newtable)[names(newtable)=="aa"]<-"a"
ID a bb
1: A 0.1 1
2: A 1.5 -1
3: A 2.1 20
4: B 1.0 -5
5: B 1.4 -5
6: B 1.8 -5
7: B 8.0 10
8: B 39.0 10
9: B 100.0 10
推荐阅读
- python - Python/Numpy 将数组中的所有“,”更改为“.”
- visual-studio - 如何修复 Visual Studio 2019 中的 Intellisense 问题,而不是在自动完成时替换文本
- android - 使用 MSBuild 编译 Android 应用时文件丢失
- google-chrome-extension - 无法检测 PWA 是否安装在第一个页面视图上?
- sql - SQL:根据不同的条件删除重复项,实际上是创建新记录
- ruby-on-rails - Rails TwitterAPI 获取用户信息
- javascript - 跟踪单击按钮时添加到页面的项目
- c - 不接受输入第二次进入不采用 emp 2 名称的 c
- json - 无法显示 boxAndWhisker canvasJS
- ubuntu - Apache solr 没有在 macos catalina 上监听 8983