R में बिंदुओं के स्थान पर चूहों से मान कैसे निकालें?


13

मेरा प्रश्न अंकों के स्थान पर चूहों से मान निकालने के बारे में है। फ़ंक्शन निकालने के साथ यह बहुत आसान है, और फ़ंक्शन मुझे अंकों में सभी चर के मूल्यों के साथ एक डेटाफ्रेम देता है। मैं प्रत्येक बिंदु के निर्देशांक को उस डेटाफ्रेम में रखना चाहता हूं। मैं ऐसा कैसे कर सकता हूं? क्या R से यह कहना संभव है कि जब रैस्टर से मान निकालते हैं तो लोकेशन पॉइंट के कॉलम भी जोड़ते हैं।

यह मेरी प्रक्रिया है:

presencias=read.table("c:/SDM_R/presencias/P_lentiscus_pres.csv",header=TRUE,sep=";")

lista_variables <-list.files(path="Variables_modelizacion/solo_ascii",pattern='*.asc',full.names=TRUE)
variables <- stack(lista_variables)

variables_presencia<-extract(variables, presencias)

परिणाम कुछ इस प्रकार हैं:

> bio1  bio12  bio18  bio2  bio4 
> 90    875    165    95    4886
> 115   1085   158    83    4075
> 135   1153   153    67    3402
> 85    1026   137    99    5203
> 96    667    128    108   5823
> 98    531    109    113   6305
> 132   450    63     123   6598
> 132   569    104    106   5963
> 95    814    196    98    5571
> 146   474    39     114   6603

लेकिन मैं समन्वय डेटा के साथ दो और कॉलम चाहता हूं (लेकिन मेरी सीएसवी निकालने वाली स्थान तालिका से अन्य कॉलम हो सकते हैं)।

बहुत बहुत धन्यवाद।


खेद है कि पहले दिखाए गए परिणामों का प्रारूप सही नहीं है।
JMCosta

पांच कॉलम (बायो 1, बायो 12 .... बायो 4) होना चाहिए
जेएमसीओस्टा

क्या मान आपके निर्देशांक के अनुरूप नहीं हैं presencias?
रोमन लुसट्रिक

वैरिएबल का मान प्रेंसेंस पॉइंट्स से होता है। लेकिन मैं तालिका में बिंदुओं के समन्वय भी चाहता हूं। लेकिन मैं नहीं जानता कि कैसे करना है।
जेएमसीओस्टा

की तर्ज पर कुछ के बारे में क्या cbind(coordinates(presencias), variables_presencia)? तब आप एसपीडीएफ का उपयोग करके परिवर्तित coordinates(result) <- ~ X + Yकर सकते हैं और आप फिर से स्थानिक वस्तुओं के लिए डिज़ाइन किए गए तरीकों के ढेर का उपयोग कर सकते हैं।
रोमन लुसट्रिक

जवाबों:


20

कि मान लिया जाये presenciasऔर variablesएक ही प्रक्षेपण का हिस्सा है, इस एक आसान काम होना चाहिए। मैं आपको अपने read.table()बयान के बाद कोड की इन पंक्तियों को presenciasSpatialPointsDataFrame ऑब्जेक्ट में Spattial को बदलने के लिए जोड़ने की सलाह देता हूं (यदि मेरे उदाहरण से भिन्न हो तो x और y निर्देशांक वाले कॉलम का नाम परिष्कृत करें)।

coordinates(presencias) <- c("x", "y")

एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण प्रदान करने के लिए, मैं अपने उत्तर के दायरे को थोड़ा और खोलने की कोशिश करता हूं। सबसे पहले, डाउनलोड करें और जर्मनी में कम या ज्यादा महत्वपूर्ण स्थानों के साथ इस ईएसआरआई आकृति को खोल दें । ये बाद में बिंदु डेटा के रूप में काम करेंगे। आपको पैकेजों की भी आवश्यकता होगी dismo, rgdalऔर rasterइस छोटे उदाहरण के लिए, इसलिए सुनिश्चित करें कि ये लाइब्रेरी (और उनकी सभी निर्भरताएं) आपके हार्ड ड्राइव पर स्थापित हैं।

चलो आवश्यक पैकेज लोड करने के साथ शुरू करते हैं।

library(dismo)
library(rgdal)
library(raster)

अगला, आपको एक नमूना RasterLayer उत्पन्न करना चाहिए। हमारे मामले में, हम जर्मनी के भौतिक मानचित्र को प्राप्त करने के लिए पैकेज gmap()से फ़ंक्शन का उपयोग करेंगे dismo

germany.mrc <- gmap("Germany")

अब आप readOGRR के rgdalपैकेज से अपनी बात को आकार में आयात कर सकते हैं । डेटा स्रोत नाम (dsn = ...) को समायोजित करना सुनिश्चित करें। संपूर्ण प्रक्षेपण सामग्री आपके विशेष मामले में अप्रचलित है। हालाँकि, जर्मनी रैस्टरलेयर के साथ हमारे बिंदु डेटा को सफलतापूर्वक ओवरले करने के लिए इसे हमारे उदाहरण में किया जाना चाहिए।

# Import SpatialPointsDataFrame
germany.places <- readOGR(dsn = "/path/to/shapefile", layer = "places")
# Define shapefile's current CRS
projection(germany.places) <- CRS("+proj=lonlat +ellps=WGS84")
# Reproject to RasterLayer's CRS
germany.places.mrc <- spTransform(germany.places, CRS(projection(germany.mrc)))

हमारे बिंदु डेटा के विशाल आकार को कम करने के लिए, हम जर्मनी में दस स्थानों का एक यादृच्छिक नमूना तैयार करेंगे। यह हमारे उद्देश्यों के लिए पर्याप्त होना चाहिए।

set.seed(35)
germany.places.mrc.sample <- germany.places.mrc[sample(nrow(germany.places.mrc), 10), ]

अब जब तैयारी की सामग्री समाप्त हो गई है, तो हम उन विशेष पिक्सेल के मूल्यों को निकालने के लिए शुरू कर सकते हैं, जो हमारे दस बेतरतीब ढंग से नमूने बिंदुओं के भीतर हैं।

data <- data.frame(coordinates(germany.places.mrc.sample),
                   germany.places.mrc.sample$name, 
                   extract(germany.mrc, germany.places.mrc.sample))
names(data) <- c("x", "y", "name", "value")

निकाले गए पिक्सेल मानों के साथ बिंदु निर्देशांक को मर्ज करने के लिए, हमें बस एक डेटाफ़्रेम सेट करने की आवश्यकता है जिसमें हमारे SpatialPointsDataFrame के निर्देशांक शामिल हैं। बस!

data
           x       y          name value
1  1073490.3 6513446 Veitsteinbach   208
2  1269100.8 6156690   Assenhausen   231
3  1336757.5 6246284    Frauenwahl   195
4   828579.9 6634122      Altenhof   189
5  1571418.1 6662558         Wohla   151
6  1192299.4 6864087     Flechtorf   170
7   976270.0 6362050    Hilsenhain   208
8  1117416.4 6092146      Nestbaum   175
9  1274192.0 6344490 Wappeltshofen   236
10  878488.2 6839843        Leeden   208

1

निश्चित रूप से आप बस कर सकते हैं:

variables_presencia$x <- presencias['x']

variables_presencia$y <- presencias['y']

(अपने समन्वयित डेटा को मानकर 'x' और 'y' नामक दो कॉलम में हैं)


मैंने उस तरह से सोचा था, लेकिन मुझे ये संदेह था: अर्क से उत्पन्न डेटाफ्रेम का एक ही क्रम है जो उपस्थिति है। (
डेटाफ़्रेम

और एक और बात, अगर किसी भी बिंदु (3 या 4) के लिए कोई चर डेटा नहीं था, तो पंक्ति की संख्या समान नहीं होगी, और आदेश सुनिश्चित करने के लिए समान नहीं होगा।
जेएमसीओस्टा

@ जेएमसीओस्टा: आप इसके बारे में गलत हैं। उन बिंदुओं के लिए NA मान लौटाए जाएंगे।
रॉबर्ट हिजमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.