Tengo un dataframe df como se muestra a continuación
name position
1 HLA 1:1-15
2 HLA 1:2-16
3 HLA 1:3-17
Me gustaría dividir la columna de posición en dos columnas más basadas en el carácter ":" de forma que obtenga
name seq position
1 HLA 1 1-15
2 HLA 1 2-16
3 HLA 1 3-17
Así que pensé que esto serviría,
df <- transform(df,pos = as.character(position))
df_split<- strsplit(df$pos, split=":")
#found this hack from an old mailing list post
df <- transform(df, seq_name= sapply(df_split, "[[", 1),pos2= sapply(df_split, "[[", 2))
sin embargo obtengo un error
Error in strsplit(df$pos, split = ":") : non-character argument
¿Qué puede fallar? Cómo se consigue esto en R. He simplificado mi caso aquí, en realidad el marco de datos tiene más de cien mil filas.
1 votos
Tal vez estoy haciendo algo mal, pero su I no obtener ningún error si df$pos es un vector de caracteres. ¿Puede usted pls
dput
¿tu data.frame?1 votos
@suncoolsu : La llamada de transformación utiliza la convención as.data.frame de stringsAsFactors=TRUE por lo que el objetivo de obtener una columna de caracteres fue derrotado. Era otra columna de factores. Mejor hubiera sido utilizar as.character alrededor del argumento pasado a strsplit. Código completo a continuación.