我有一个数据表,其中包含A,B,C各个值:
A B C
72764 115226 115364
74169 115387 119997
74770 120084 121022
77114 133818 103949
我希望在X,Y,Z(+50多个变量)数组中找到每个值的最接近值和/或最接近的值:
X Y Z
84213 45661 111351
114406 114580 114580
114491 114825 114825
114880 NA 114876
我最好打印出这样的东西(打印到A变量中最接近变量的距离):
A_X A_Y
11449 -27103
10044 -28508
9443 -29109
7099 -31453
也许是因为它是复活节,而我的大脑处于一半的容量,但我无法找到一种简单而自动的方法来处理这个问题。很抱歉,如果之前已经解决了这个问题,我在网页上找不到答案。
我对Linux中的R和shell脚本非常熟悉,我猜我也可以尝试使用python脚本解决它,如果有人愿意帮助我的话。
答案 0 :(得分:0)
我认为你正在寻找combn
功能。循环和自动化将类似于
pairs = combn(ncol(df2),ncol(df1))
for(i in 1:ncol(pairs)){
column1 = df1[,pairs[1,i]]
column2 = df2[,pairs[2,i]]
#Do your difference/closest value calculations and store in results
}
答案 1 :(得分:0)
如果muteRemoteData.then( data => htmlDiv.innerHtml = data)
是您的第一个数据帧,而df
是您的第二个数据帧,那么您可以执行以下操作...
df2
据推测,您需要重复sapply(df2,function(v) sapply(df$A,function(x) (v-x)[which.min(abs(x-v))]))
X Y Z
[1,] 11449 -27103 38587
[2,] 10044 -28508 37182
[3,] 9443 -29109 36581
[4,] 7099 -31453 34237
的所有列,这类似
df
结果将是一个数据框列表,每列lapply(df, function(z)
sapply(df2, function(v)
sapply(z, function(x) (v-x)[which.min(abs(x-v))])))