दिलचस्प पोस्ट
SSL त्रुटि रूबीगाम्स इंस्टॉल करते समय, 'https://rubygems.org/ से डेटा खींचने में असमर्थ पीजीजी छवि को एसवीजी में बदलने के लिए कैसे? कस्टम JSON deserializer जीएसएन का उपयोग कर एक एकल SQL क्वेरी में एकाधिक पंक्तियाँ डालना? "इस ऐप की दर / समीक्षा" के लिए ऐप स्टोर लिंक jquery- सफलता का परिणाम पर AJAX परिणाम का उपयोग कर वापसी मूल्य क्लास.नईवंस्टेंस () "बुराई" क्यों है? एफ में मान मानों का उपयोग कैसे करें: चयनइटम (एस) "-वे-फ़ाइल-एक्सेस-टू-फाइल्स" मोड पर क्रोम का इस्तेमाल करते हुए एचटीएमएल कैसे शुरू करें? मैं <br /> टैग के साथ स्ट्रिंग में सभी लाइन ब्रेक्स कैसे बदलूं? पायथन 2.7 से पहले डिक्की समझ के लिए वैकल्पिक POST JSON 415 असमर्थित मीडिया प्रकार, स्प्रिंग 3 एमवीसी के साथ विफल रहता है Bitfields में क्यों एक बिट endianness मुद्दा है? पता लगाएँ कि डिवाइस आईओएस है कैसे "मौजूदा चौखटे जोड़ें" Xcode 4 में?

समूह द्वारा आईडी कॉलम जोड़ें

मैं अक्षांश और देशांतर के दो कॉलमों के आधार पर आर में एक अद्वितीय आईडी बनाना चाहता हूं ताकि डुप्लिकेट किए गए स्थानों में एक ही क्लस्टर आईडी हो।

उदाहरण के लिए:

LAT LONG Cluster_ID 13.5330 -15.4180 1 13.5330 -15.4180 1 13.5330 -15.4180 1 13.5330 -15.4180 1 13.5330 -15.4170 2 13.5330 -15.4170 2 13.5330 -15.4170 2 13.5340 -14.9350 3 13.5340 -14.9350 3 13.5340 -15.9170 4 13.3670 -14.6190 5 

वेब के समाधान से एकत्रित समाधान "समूह द्वारा आईडी कॉलम जोड़ें"

interaction का उपयोग करने वाला यह एक तरीका है।

 d <- read.table(text='LAT LONG 13.5330 -15.4180 13.5330 -15.4180 13.5330 -15.4180 13.5330 -15.4180 13.5330 -15.4170 13.5330 -15.4170 13.5330 -15.4170 13.5340 -14.9350 13.5340 -14.9350 13.5340 -15.9170 13.3670 -14.6190', header=TRUE) d <- transform(d, Cluster_ID = as.numeric(interaction(LAT, LONG, drop=TRUE))) # LAT LONG Cluster_ID # 1 13.533 -15.418 2 # 2 13.533 -15.418 2 # 3 13.533 -15.418 2 # 4 13.533 -15.418 2 # 5 13.533 -15.417 3 # 6 13.533 -15.417 3 # 7 13.533 -15.417 3 # 8 13.534 -14.935 4 # 9 13.534 -14.935 4 # 10 13.534 -15.917 1 # 11 13.367 -14.619 5 

संपादित करें: अंतराल पर drop=TRUE आपूर्ति करने के लिए @ स्काटलमैन के सुझाव शामिल हैं I

आँकड़े:

 dat <- read.table(text=" LAT LONG 13.5330 -15.4180 13.5330 -15.4180 13.5330 -15.4180 13.5330 -15.4180 13.5330 -15.4170 13.5330 -15.4170 13.5330 -15.4170 13.5340 -14.9350 13.5340 -14.9350 13.5340 -15.9170 13.3670 -14.6190", header = TRUE) 

ये कमांड 1 शुरू होने वाला एक आईडी चर बनाते हैं:

 comb <- with(dat, paste(LAT, LONG)) within(dat, Cluster_ID <- match(comb, unique(comb))) 

उत्पादन:

  LAT LONG Cluster_ID 1 13.533 -15.418 1 2 13.533 -15.418 1 3 13.533 -15.418 1 4 13.533 -15.418 1 5 13.533 -15.417 2 6 13.533 -15.417 2 7 13.533 -15.417 2 8 13.534 -14.935 3 9 13.534 -14.935 3 10 13.534 -15.917 4 11 13.367 -14.619 5 

.GRP को data.table 1.8.3 में जोड़ा गया था, जिससे आप निम्न कार्य कर सकते हैं:

 # Your data, as a data.frame dat <- read.table(text='LAT LONG 13.5330 -15.4180 13.5330 -15.4180 13.5330 -15.4180 13.5330 -15.4180 13.5330 -15.4170 13.5330 -15.4170 13.5330 -15.4170 13.5340 -14.9350 13.5340 -14.9350 13.5340 -15.9170 13.3670 -14.6190', header=TRUE) # Convert it to a data.table # with keys as the combination of LAT and LONG library(data.table) DT <- data.table(dat, key="LAT,LONG") DT[, Cluster_ID:=.GRP, by=key(DT)] DT # LAT LONG Cluster_ID # 1: 13.367 -14.619 1 # 2: 13.533 -15.418 2 # 3: 13.533 -15.418 2 # 4: 13.533 -15.418 2 # 5: 13.533 -15.418 2 # 6: 13.533 -15.417 3 # 7: 13.533 -15.417 3 # 8: 13.533 -15.417 3 # 9: 13.534 -15.917 4 # 10: 13.534 -14.935 5 # 11: 13.534 -14.935 5 

निष्पादन सुझाए गए समाधानों की तुलना करें:

 df <- read.table(text='LAT LONG 13.5330 -15.4180 13.5330 -15.4180 13.5330 -15.4180 13.5330 -15.4180 13.5330 -15.4170 13.5330 -15.4170 13.5330 -15.4170 13.5340 -14.9350 13.5340 -14.9350 13.5340 -15.9170 13.3670 -14.6190', header=TRUE) f1 <- function(df, cols) { df$id <- as.numeric(interaction(df[cols], drop = TRUE)) df } f2 <- function(df, cols) { comb <- do.call(paste, c(as.list(df[cols]), sep = ".")) df$id <- match(comb, unique(comb)) df } f2(df, 1:2) #> LAT LONG id #> 1 13.533 -15.418 1 #> 2 13.533 -15.418 1 #> 3 13.533 -15.418 1 #> 4 13.533 -15.418 1 #> 5 13.533 -15.417 2 #> 6 13.533 -15.417 2 #> 7 13.533 -15.417 2 #> 8 13.534 -14.935 3 #> 9 13.534 -14.935 3 #> 10 13.534 -15.917 4 #> 11 13.367 -14.619 5 microbenchmark::microbenchmark(f1(df, 1:2), f2(df, 1:2)) #> Unit: microseconds #> expr min lq mean median uq max neval cld #> f1(df, 1:2) 486.400 510.422 575.26659 573.3945 594.1165 1622.243 100 b #> f2(df, 1:2) 72.952 79.208 86.09265 83.5275 89.7195 159.740 100 a