2010-06-09 9 views
5

Como en el ejemplo, estoy intentando substring la columna Video_full en un data.frame (video_data_2) en la que estoy trabajando. Quiero mantener todos los personajes después del período. El período está siempre presente, solo hay un período y está en una posición diferente en cada valor para la columna.¿Cómo especifico una posición dinámica para el inicio de la subcadena?

 Date      Video_full  Instances 
1 Apr 1, 2010 installs/AA.intro_video_1  546   
2 Apr 1, 2010 installs/ABAC.intro_video_2 548  

me subcadena a trabajar:

video_data_2$Video_full <- substring(video_data_2$Video_full,11) 

Y strsplit también:

strsplit("installs/AA.intro_video_1 ",'[.]') 

que no soy capaz de encontrar la manera de iniciar el substring en una posición dinámica o solo mantenga el segundo valor devuelto por strsplit.

Gracias por cualquier ayuda que pueda ofrecer para una simple pregunta.

Respuesta

8

puede utilizar sub()

video_data_2$Video_full <- sub("^.*\\.","", video_data_2$Video_full) 
3

utilizando un enfoque strsplit

video_data_2$Video_full <- sapply(strsplit(video_data_2$Video_full, "\\."),head)[2,] 
+0

Al igual que en la primera respuesta proporcionada por @Marek, que recibió un 'argumento que no es de carácter' error cuando intenté esto. ¿Alguna idea sobre lo que podría causarlo? – analyticsPierce

7

Otra forma de utilizar strsplit

sapply(strsplit(video_data_2$Video_full, "\\."), "[", 2) 

que es la abreviatura de

sapply(strsplit(video_data_2$Video_full, "\\."), function(x) x[2]) 
+0

+1 Me gusta mucho el uso de "[". Qué significa eso? (¿Y dónde está la explicación en ayuda de R?) –

+2

@ gd047 Operador de indexación "[" es una función y puede obtener ayuda de '?" ["' (o 'help (" [")'). Puede usarlo como cualquier otra función, por ejemplo: '\' [\ '(letters, 3: 5)', pero es realmente útil en casos como question o 'do.call' u otros lugares cuando debe proporcionar directamente el nombre de la función . – Marek

+0

gracias por proporcionar esta respuesta. No estoy seguro de por qué, pero cuando ejecuté esta función, recibí un error de "argumento sin carácter". ¿Alguna idea sobre qué podría causar eso? – analyticsPierce

2

Trate stringr

library(stringr) 
str_split_fixed(video_data_2$Video_full, "\\.", n = 2)[, 2] 
+0

Esta solución es mucho más lenta que otras. Puedes ver esto por 10.000 vectores de longitud. – Marek

+0

¡Pruébelo! Además, ¿por qué preocuparse por la velocidad a menos que sea necesario? – hadley

+0

gracias por su respuesta. Revisé tus documentos para este paquete y obtuve mucho uso de él. Sin embargo, no pude conseguirlo para instalar. Estoy usando el Rbundle en el compañero de texto y he intentado install.packages ("stringr", repos = "http://cran.r-project.org/src/contrib/stringr_0.3.tar.gz", type = "source "), el mensaje que recibí dijo que el paquete no estaba disponible. Lo siento si esto debería ser una pregunta separada. – analyticsPierce

Cuestiones relacionadas