2011-06-16 19 views
5

मैं "@" पर ईमेलड्रेस युक्त कॉलम को विभाजित करना चाहता हूं।ईमेल पते वाले स्प्लिट कॉलम

d$domain<-strsplit(d$email, "@")[[1]] 

काम नहीं करता है। ऐसा करने का सही तरीका क्या है?

+0

क्या नियमित अभिव्यक्तियों के लिए मेटाएक्टेक्टर है? यदि ऐसा है, तो आपको इसे "\\" से पहले करने की आवश्यकता हो सकती है। Http://127.0.0.1:15646/library/base/html/strsplit.html – Jubbles

+0

देखें या आपको 'strsplit (डी $ ईमेल," @ ") ',' के 'असूची' को अनुक्रमित करने की आवश्यकता हो सकती है। 'डी $ डोमेन <-unlist (strsplit (डी $ ईमेल," @ ")) [1]' – Jubbles

उत्तर

2

(शायद) एक से अधिक पंक्ति आवश्यक है:

for (i in 1:length(row.names(d)){  
d$domain[i]<-unlist(strsplit(d$email[i], "@"))[2] 
} 

(नोट: d$emailcharacter और नहीं factor हो सकता है और चाहिए, जबकि आप अपने प्रश्न में सूचकांक के रूप में 1 इस्तेमाल किया, 2 की अनुक्रमणिका किसी ईमेल के डोमेन से मेल खाती है)

अद्यतन: मुझे लगता है कि इस कार्य को 'लागू' का उपयोग करके एक पंक्ति में पूरा करने का एक तरीका अभी भी है, लेकिन मुझे यकीन नहीं है कि यह कैसे करें ... अभी तक। (समारोह को परिभाषित करने के बाद)

एक पंक्ति जवाब: fn <- function(x){unlist(strsplit(x,"@"))[2]} d$domain <- lapply(d$email, fn)

+0

धन्यवाद लेकिन आपका आदेश प्रत्येक पंक्ति को पहली पंक्ति के ईमेल के डोमेन भाग से भरता है। कोई विचार क्यों यह हो सकता है? – Chris

+0

@Chris: ऊपर अद्यतन उत्तर देखें। – Jubbles

+0

धन्यवाद! बहुत अच्छा काम करता है! – Chris

4

आपके पास सही विचार है, लेकिन आप इसे गलत तरीके से पार्स कर रहे हैं। इस प्रयास करें:

name <- "[email protected]" 
splitname <- strsplit(name, "@") 
emailid <- sapply(splitname, "[", 1) 
domain <- sapply(splitname, "[", 2) 
2

तुम भी पता है, इस तरह के प्रत्येक आधे के लिए एक पंक्ति के साथ एक मैट्रिक्स कर सकता है, और आसानी से जो भी हिस्सा आप चाहते थे का चयन करें।

matrix(unlist(strsplit(name,"@")),nrow=2) 
6

आप नियमित अभिव्यक्ति का उपयोग कर सकते हैं - वे मजेदार हैं!

d <- data.frame(email=rep([email protected], 10)) 
d$address <- gsub("@.*", "", d$email) 
d$domain <- gsub(".*@", "", d$email) 
6

stringr पैकेज से str_split_fixed इस आसान बनाता है:

library(stringr) 
str_split_fixed(d$email, "@", n = 2) 
0

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

parse.email <- function(emails) { 
email.list <- strsplit(emails, split = '@') 
# Preallocate the vectors 
n <- length(email.list) 
local <- vector(length = n) 
domain <- vector(length = n) 
for (i in 1:n){ 
    local[i] <- email.list[[i]][1] 
    domain[i] <- email.list[[i]][2] 
} 
l <- list(local, domain) 
names(l) <- c('local', 'domain') 
return(l)} 
संबंधित मुद्दे