【问题标题】:R: Merge data.table by two nearest variables [closed]R:通过两个最近的变量合并data.table [关闭]
【发布时间】:2015-03-24 10:17:44
【问题描述】:

编辑:代码工作得很好,问题是我吗...

我想将几个data.tables 合并为一个。每个表中有三个columns,两个坐标xy,以及分配给坐标的一个Value。但是,data.tables 的坐标略有不同,所以我想合并最近的坐标,所以我得到了

x y Value_1 Value_2 ... Value_i

我发现这个thread 似乎可以解决问题。提供了这个解决方案:

#Directly taken from the above mentioned thread:
func = function(u,v){
vec = with(DT2, (u-x)^2 + (v-y)^2)
DT2[which.min(vec),]$Q
}

transform(DT1, Q=apply(DT1, 1, function(u) func(u[1], u[2])))

这似乎解决了问题。

但是,如果我使用以下数据:

#create data
library(data.table)
dt1 = data.table(X = runif(10000), Y = runif(10000), Value = runif(10000, min=5, max=10))
dt2 = data.table(X = runif(10000), Y = runif(10000), Value = runif(10000, min=5, max=10))

#Round data
dt1 = round(dt1, 3)
dt2 = round(dt2, 3)

setkey(dt1, "X","Y")

#Function from solution
func = function(u,v){
vec = with(dt2, (u-X)^2 + (v-Y)^2)
dt2[which.min(vec),]$Value_1
}

test = transform(dt1, Value=apply(dt1, 1, function(u) func(u[1], u[2])))

我收到以下错误消息:

Error in data.table(list(X = c(0, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001,: 
  column or argument 2 is NULL

当我使用与上面创建的数据非常相似的“真实”数据时,也会出现此错误消息。

我还很新,已经阅读了很多关于data.table 的信息,但还没有找到可行的方法。有什么建议么?

【问题讨论】:

    标签: r merge data.table


    【解决方案1】:

    df2中没有Q列,导致结果为空

      dt2[which.min(vec),]$Q
    

    func 定义中。

    【讨论】:

    • 天哪……这很明显,不是吗!感谢您指出这一点 :-) 现在我将其更改为...
    猜你喜欢
    • 2023-03-19
    • 2018-01-12
    • 2013-12-26
    • 2015-02-07
    • 2018-06-17
    • 1970-01-01
    • 2012-09-23
    • 2021-03-06
    • 2017-02-17
    相关资源
    最近更新 更多