Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:通过两个最近的变量合并data.table_R_Merge_Data.table - Fatal编程技术网

R:通过两个最近的变量合并data.table

R:通过两个最近的变量合并data.table,r,merge,data.table,R,Merge,Data.table,编辑:代码工作得很好,是我的问题 我想将多个data.tables合并为一个。每个表中有三列,两个坐标x、y和一个分配给坐标的值。但是,data.tables的坐标略有不同,因此我希望合并最近的坐标,以便 x y Value_1 Value_2 ... Value_i 我发现这似乎解决了问题。该解决方案是: #Directly taken from the above mentioned thread: func = function(u,v){ vec = with(DT2, (u-x)^2

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

我想将多个data.tables合并为一个。每个表中有三列,两个坐标x、y和一个分配给坐标的值。但是,data.tables的坐标略有不同,因此我希望合并最近的坐标,以便

x y Value_1 Value_2 ... Value_i
我发现这似乎解决了问题。该解决方案是:

#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的书,但还没有找到一种有效的方法。有什么建议吗

在df2中没有Q列,这使得结果为空

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

在函数定义中。

哦,天哪。。。这很明显,不是吗!谢谢你指出:-现在工作,我把它改成。。。