2010-06-09 3 views
5

Comme dans l'exemple, j'essaye de substring la colonne Video_full dans un data.frame (video_data_2) sur lequel je travaille. Je veux garder tous les personnages après la période. La période est toujours présente, il n'y a qu'une seule période et elle est dans une position différente dans chaque valeur de la colonne.Comment spécifier une position dynamique pour le début de la sous-chaîne?

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

Je suis sous-chaîne à travailler:

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

Et strsplit aussi:

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

Je ne suis pas en mesure de comprendre comment démarrer le substring dans une position dynamique ou Conservez uniquement la deuxième valeur renvoyée par strsplit.

Merci pour toute aide que vous pouvez offrir pour une question simple.

Répondre

8

vous pouvez utiliser sous()

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

une approche utilisant StrSplit

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

similaires à la première réponse fournie par @Marek, je reçu une erreur « argument non caractère » quand j'ai essayé cela. Des pensées sur ce qui pourrait le causer? – analyticsPierce

7

Une autre façon d'utiliser strsplit

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

qui est l'abréviation de

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

+1 J'aime beaucoup l'utilisation de "[". Qu'est-ce que ça veut dire? (et où est l'explication dans R help?) –

+2

@ gd047 L'opérateur d'indexation "[" est une fonction et vous pouvez atteindre son aide par '?" ["' (ou 'help (" [")'). Vous pouvez l'utiliser comme n'importe quelle autre fonction, par exemple: '\' [\ '(lettres, 3: 5)', mais c'est vraiment utile dans les cas comme question ou 'do.call' ou autres endroits où vous devez fournir directement le nom de la fonction . – Marek

+0

merci de fournir cette réponse. Je ne sais pas pourquoi mais quand j'ai couru cette fonction j'ai eu une erreur 'non-character argument'. Des pensées sur ce que cela causerait? – analyticsPierce

2

Essayez stringr

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

Cette solution est beaucoup plus lente que les autres. Vous pouvez le voir pour un vecteur de 10 000 longueurs. – Marek

+0

Prouvez-le! De plus, pourquoi s'inquiéter de la vitesse, sauf si vous devez le faire. – hadley

+0

merci pour votre réponse. J'ai parcouru vos docs pour ce paquet et j'en aurais beaucoup utilisé. Cependant, je n'ai pas réussi à l'installer. J'utilise le Rbundle dans textmate et j'ai essayé install.packages ("stringr", repos = "http://cran.r-project.org/src/contrib/stringr_0.3.tar.gz", type = "source "), le message que j'ai reçu disait que le paquet n'était pas disponible. Désolé si cela devrait être une question distincte. – analyticsPierce

Questions connexes