पोस्टर ने मानों को देखने के बारे में नहीं पूछा कि क्या exact=FALSE
, लेकिन मैं इसे अपने स्वयं के संदर्भ के लिए एक उत्तर के रूप में जोड़ रहा हूं और संभवतः अन्य।
यदि आप श्रेणीबद्ध मूल्यों को देख रहे हैं, तो अन्य उत्तरों का उपयोग करें।
एक्सेल vlookup
भी आपको 4 वें तर्क (1) के साथ संख्यात्मक मूल्यों के लिए लगभग मैच करने की अनुमति देता है match=TRUE
। मैं सोचता हूं बारे मेंmatch=TRUE
थर्मामीटर पर मूल्यों को देखने तरह । डिफ़ॉल्ट मान FALSE है, जो श्रेणीबद्ध मूल्यों के लिए एकदम सही है।
यदि आप लगभग मिलान करना चाहते हैं (एक लुकअप प्रदर्शन करते हैं), आर में एक फ़ंक्शन है findInterval
, जिसे (जैसा कि नाम से पता चलता है) अंतराल / बिन मिलेगा जिसमें आपका निरंतर संख्यात्मक मान होता है।
हालाँकि, मान लें कि आप चाहते हैं findInterval
मान कई मानों के लिए हैं। आप एक लूप लिख सकते हैं या एक लागू फ़ंक्शन का उपयोग कर सकते हैं। हालाँकि, मैंने इसे DIY सदिश दृष्टिकोण लेने के लिए अधिक कुशल पाया है।
मान लें कि आपके पास x और y द्वारा अनुक्रमित मानों का एक ग्रिड है:
grid <- list(x = c(-87.727, -87.723, -87.719, -87.715, -87.711),
y = c(41.836, 41.839, 41.843, 41.847, 41.851),
z = (matrix(data = c(-3.428, -3.722, -3.061, -2.554, -2.362,
-3.034, -3.925, -3.639, -3.357, -3.283,
-0.152, -1.688, -2.765, -3.084, -2.742,
1.973, 1.193, -0.354, -1.682, -1.803,
0.998, 2.863, 3.224, 1.541, -0.044),
nrow = 5, ncol = 5)))
और आपके पास कुछ मान हैं जिन्हें आप x और y द्वारा देखना चाहते हैं:
df <- data.frame(x = c(-87.723, -87.712, -87.726, -87.719, -87.722, -87.722),
y = c(41.84, 41.842, 41.844, 41.849, 41.838, 41.842),
id = c("a", "b", "c", "d", "e", "f")
यहाँ उदाहरण दिया गया है:
contour(grid)
points(df$x, df$y, pch=df$id, col="blue", cex=1.2)
आप इस प्रकार के सूत्र के साथ x अंतराल और y अंतराल पा सकते हैं:
xrng <- range(grid$x)
xbins <- length(grid$x) -1
yrng <- range(grid$y)
ybins <- length(grid$y) -1
df$ix <- trunc( (df$x - min(xrng)) / diff(xrng) * (xbins)) + 1
df$iy <- trunc( (df$y - min(yrng)) / diff(yrng) * (ybins)) + 1
आप इसे एक कदम आगे ले जा सकते हैं और grid
इस तरह से z मानों पर एक (सरलीकृत) प्रक्षेप कर सकते हैं :
df$z <- with(df, (grid$z[cbind(ix, iy)] +
grid$z[cbind(ix + 1, iy)] +
grid$z[cbind(ix, iy + 1)] +
grid$z[cbind(ix + 1, iy + 1)]) / 4)
जो आपको ये मूल्य देता है:
contour(grid, xlim = range(c(grid$x, df$x)), ylim = range(c(grid$y, df$y)))
points(df$x, df$y, pch=df$id, col="blue", cex=1.2)
text(df$x + .001, df$y, lab=round(df$z, 2), col="blue", cex=1)
df
ध्यान दें कि ix, और iy को लूप के साथ भी पाया जा सकता है findInterval
, उदाहरण के लिए यहां दूसरी पंक्ति के लिए एक उदाहरण
findInterval(df$x[2], grid$x)
findInterval(df$y[2], grid$y)
जो मेल खाता है ix
और iy
मेंdf[2]
फुटनोट: (1) वेनसुप के चौथे तर्क को पहले "मैच" कहा जाता था, लेकिन उन्होंने रिबन पेश करने के बाद इसका नाम बदलकर "[range_lookup]" कर दिया।