找到两个列表之间的最接近的数字

时间:2016-03-09 15:25:28

标签: r list

我有一个数据帧列表(df1)和另一个数据帧列表(df2),它们包含在第一个列表中查找“最近值”所需的值。

df1<-list(d1=data.frame(y=1:10), d2=data.frame(y=3:20))
df2<-list(d3=data.frame(y=2),d4=data.frame(y=4))

说我有这个功能:

df1[[1]]$y[which(abs(df1[[1]]$y-df2[[1]])== min(abs(df1[[1]]$y-df2[[1]])))]

此函数在df1中找到df2值1的最接近值时非常有效。我无法实现的是与lapply一起工作,如:

lapply(df1, function(x){
  f<-x$y[which(abs(x$y-df2) == min(abs(x$y - df2)))]
})

我想返回一个数据框,其中包含所有f值,显示df1中每个项目的最接近数字。

谢谢, 中号

2 个答案:

答案 0 :(得分:1)

我假设您正在尝试将df1和df2中的第一个data.frames相互比较,并将df1和df2中的第二个data.frames相互比较。使用which.min函数也很有用(请查看help(which.min))

修改

在回复您的评论时,您可以改为使用mapply

> mapply(function(x,z) x$y[which.min(abs(x$y - z$y))], df1, df2)
d1 d2 
 2  4 

答案 1 :(得分:1)

OP的真正问题尚不清楚,但我可能会这样做......

library(data.table)
DT1 = rbindlist(unname(df1), idcol=TRUE)
DT2 = rbindlist(unname(df2), idcol=TRUE)

DT1[DT2, on=c(".id","y"), roll="nearest"]

#    .id y
# 1:   1 2
# 2:   2 4