R:通过两个最近的变量合并 data.table
R: Merge data.table by two nearest variables
编辑:代码工作正常,问题出在我身上...
我想将几个 data.tables
合并为一个。每个table中有3个columns
,两个坐标x
,y
,坐标赋值一个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
当我使用与上面创建的数据非常相似的 "real" 数据时,也会出现此错误消息。
我是新手,已经阅读了很多关于 data.table
的内容,但还没有找到可行的方法。有什么建议么?
df2 中没有 Q
列,这使得
的结果为空
dt2[which.min(vec),]$Q
在func
定义中。
编辑:代码工作正常,问题出在我身上...
我想将几个 data.tables
合并为一个。每个table中有3个columns
,两个坐标x
,y
,坐标赋值一个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
当我使用与上面创建的数据非常相似的 "real" 数据时,也会出现此错误消息。
我是新手,已经阅读了很多关于 data.table
的内容,但还没有找到可行的方法。有什么建议么?
df2 中没有 Q
列,这使得
dt2[which.min(vec),]$Q
在func
定义中。