ईमेल डेटा में डुप्लिकेट की जाँच करना
मेरे पास ईमेल के लिए डेटा के कई रिकॉर्ड हैं, अब मैं जांचना चाहता हूं कि क्या मेरे पास एक ही मेल आईडी के साथ डुप्लिकेट नाम हैं और चेक करें कि क्या ईमेल में @ से पहले डुप्लिकेट नाम मौजूद हैं। मैं नीचे दृष्टिकोण की कोशिश कर रहा हूं लेकिन मेरे लिए काम नहीं कर रहा है। इसके अलावा, मेरे पास NA और रिक्त कक्ष हैं जिन्हें मैं भी अनदेखा करना चाहता हूं।
पहले मैं जांचना चाहता हूं कि क्या इसी नाम से एक और मेल आईडी मौजूद है। दूसरा मैं जाँच करना चाहता हूँ कि क्या मेल कॉलम में डुप्लिकेट नाम मौजूद हैं (उदाहरण के लिए [email protected] में नाम अगर हमारे पास क्लिंग मार्क वाली दूसरी मेल आईडी है)
df <- data.frame(EMP.ID = c(88111,"BBB4477","BBB4058","BBB5832","BBB0338","BBB1814","BBB6543",875430,875970,"BBB0243","BBB1943","BBB9344","BBB9701","BBB1814","BBB8648","BBB4373","BBB7270","BBB6165","BBB7460","BBB7528","BBB6092"),
name = c("link adam","dy tt","link adam","gbesada","dojeda","slew lang"," alpucheta","r zona","jachaval","allo nyyn","mbautis","grand fring","jali","kintom dang","namoti","shan mig","NA","NA","NA","NA",""),
email = c("[email protected]","[email protected]","[email protected]","[email protected]","[email protected]"," [email protected]"," [email protected]"," [email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]"," [email protected]","","NA",""))
Email= "email"
Name = "name"
valuesToIgnore <- c("", NA)
df <- df %>% mutate(`duplicate mailid` = ifelse(
duplicated(stringr::str_extract(Email, "([^@]+)")) &
!is.na(Email) &
nchar(as.character(Email)) > 0,
"Duplicate mail exist", ""
))
indicesOfAtSymbol <- unlist(gregexpr(pattern='@',Email))
namesFromEmails <- substr(Email,1, indicesOfAtSymbol-1)
df <- df %>% mutate(`duplicate name`= ifelse(duplicated(namesFromEmails, incomparables=valuesToIgnore),"duplicate name",""))
आउटपुट जैसा होना चाहिए

जवाब
Tidyverse एक हथौड़ा है जिससे सब कुछ एक नाखून की तरह दिखता है। हथौड़े खतरनाक हैं।
df <- data.frame(EMP.ID = c(88111,"BBB4477","BBB4058","BBB5832","BBB0338","BBB1814","BBB6543",875430,875970,"BBB0243","BBB1943","BBB9344","BBB9701","BBB1814","BBB8648","BBB4373","BBB7270","BBB6165","BBB7460","BBB7528","BBB6092"),
name = c("link adam","dy tt","link adam","gbesada","dojeda","slew lang"," alpucheta","r zona","jachaval","allo nyyn","mbautis","grand fring","jali","kintom dang","namoti","shan mig","NA","NA","NA","NA",""),
email = c("[email protected]","[email protected]","[email protected]","[email protected]","[email protected]"," [email protected]"," [email protected]"," [email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]","[email protected]"," [email protected]","","NA",""))
parts = strsplit(df$email, "@")
first_parts = character()
for (i in 1:length(parts)) {
first_parts[i] <- parts[[i]][1]
}
print(parts[which(duplicated(first_parts))])
शुद्ध आर समाधान। यदि आपको किसी और चीज़ की ज़रूरत है, which(duplicated(first_parts))
तो डेटा को पुनः प्राप्त करने के लिए बस अनुक्रमित का उपयोग करें । Tidyverse भयावहता को बुलाने की आवश्यकता नहीं है।
टिप्पणी में अनुरोध के अनुसार आगे की व्याख्या:
strsplit(df$email, "@")
आपके डेटा फ्रेम से ईमेल कॉलम लेता है और प्रत्येक स्ट्रिंग को "@" साइन द्वारा अलग करता है।first_parts = character()
एक खाली चरित्र वेक्टर बनाता हैfor (i in 1:length(parts)) { first_parts[i] <- parts[[i]][1] }
चूँकि स्ट्रैसप्लिट का परिणाम एक सूची में होता है, जो ताड क्लंकी है, यहाँ हम ईमेल का केवल पहला भाग लेते हैं, क्योंकि हम तुलना करना चाहते हैं।duplicated(first_parts)
2 समय के लिए मिलने वाले हर मूल्य के लिए सही के साथ बूलियन वेक्टर देता है।which(...)
TRUE के सूचकांकों को लौटाता है। संख्याओं को पढ़ने के बाद से एक कॉस्मेटिक सुधार का एक कदम आमतौर पर FALSEs के लंबे वेक्टर में कुछ TRUE के लिए खोज करने से आसान है।parts[...]
पिछले चरण के सूचकांकों के साथ केवल सूची प्रविष्टियां लें। यह भी ध्यान दें कि ईमेल उपसर्ग 3 या अधिक बार होने की स्थिति में, यह पहली बार से आगे प्रत्येक घटना के लिए डुप्लिकेट किए गए रिटर्न TRUE के बाद से N - 1 बार यहां सूचीबद्ध किया जाएगा।
और गंभीरता से। यदि आपको इस स्पष्टीकरण को पढ़ने की आवश्यकता है, तो मूल बातें सीखने तक टिड्वर्स से दूर रहें। Tidyverse एक बहुत शक्तिशाली उपकरण है। कि मैं मानता हूँ। हालांकि यह पहले से ही अराजक आर में और अराजकता लाता है जब तक कि आप आर पर ठोस पकड़ नहीं लेते हैं, कृपया पुनर्विचार करें।