Quiero dividir una columna que contiene emailadresses en la "@".Columna dividida que contiene las direcciones de correo electrónico
d$domain<-strsplit(d$email, "@")[[1]]
No funciona. ¿Cuál es la forma correcta de hacer esto?
Quiero dividir una columna que contiene emailadresses en la "@".Columna dividida que contiene las direcciones de correo electrónico
d$domain<-strsplit(d$email, "@")[[1]]
No funciona. ¿Cuál es la forma correcta de hacer esto?
(Tal vez) más de una línea es necesario:
for (i in 1:length(row.names(d)){
d$domain[i]<-unlist(strsplit(d$email[i], "@"))[2]
}
(Nota: d$email
debe haber character
y no factor
y mientras que utilizó 1 como el índice en su pregunta, la el índice de 2 corresponderá al dominio de un correo electrónico)
Actualización: Creo que todavía hay una manera de completar esta tarea en una línea usando 'apply', pero todavía no estoy seguro de cómo hacerlo ...
Una de las respuestas línea (después de definir la función): fn <- function(x){unlist(strsplit(x,"@"))[2]}
d$domain <- lapply(d$email, fn)
Tiene la idea correcta, pero lo está analizando mal. Prueba esto:
name <- "[email protected]"
splitname <- strsplit(name, "@")
emailid <- sapply(splitname, "[", 1)
domain <- sapply(splitname, "[", 2)
También puede hacer una matriz con una fila para cada mitad de la dirección, así, y seleccionar fácilmente cualquier parte que quería.
matrix(unlist(strsplit(name,"@")),nrow=2)
Puede usar una expresión regular: ¡son divertidos!
d <- data.frame(email=rep([email protected], 10))
d$address <- gsub("@.*", "", d$email)
d$domain <- gsub(".*@", "", d$email)
str_split_fixed
del paquete stringr
lo hace fácil:
library(stringr)
str_split_fixed(d$email, "@", n = 2)
Aquí es una función que debe hacerse cargo de la división de los mensajes de correo electrónico para usted. Devuelve una lista con las partes locales y de dominio del correo electrónico.
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)}
¿Es @ un metacarácter para las expresiones regulares? Si es así, es posible que deba precederlo por "\\". Consulte http://127.0.0.1:15646/library/base/html/strsplit.html – Jubbles
O puede que necesite indexar 'unlist' of' strsplit (d $ email, "@") ', p. Ej. 'd $ domain <-unlist (strsplit (d $ email," @ ")) [1]' – Jubbles