2010-06-09 12 views
5

Tak jak w przykładzie, próbuję substring kolumna Video_full w data.frame (video_data_2) nad którym pracuję. Chcę zachować wszystkie postacie po okresie. Okres jest zawsze obecny, jest tylko jeden okres i znajduje się w innej pozycji w każdej wartości dla kolumny.Jak określić pozycję dynamiczną dla początku podciągu?

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

mam podciąg do pracy:

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

And strsplit też:

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

po prostu nie jestem w stanie dowiedzieć się, jak rozpocząć substring w dynamicznej pozycji lub zachowaj tylko drugą wartość zwróconą przez strsplit.

Dziękujemy za pomoc w zakresie prostych pytań.

Odpowiedz

8

można użyć sub()

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

podejście używając strsplit

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

Podobny do pierwszej odpowiedzi udzielonej przez @Marek otrzymałem argument non-znakowy "błąd, gdy próbowałem to. Jakieś myśli o tym, co może spowodować? – analyticsPierce

7

Innym sposobem wykorzystania strsplit

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

który jest skrótem od

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

+1 Bardzo podoba mi się użycie "[". Co to znaczy? (i gdzie jest wyjaśnienie w pomocy R?) –

+2

@ gd047 Operator indeksowania "[" jest funkcją i możesz dotrzeć do jej pomocy przez '?" ["' (lub 'help (" [")'). Możesz użyć go jako dowolnej innej funkcji, np .: '\' [\ (litery, 3: 5) ', ale jest bardzo pomocna w przypadkach takich jak pytanie lub' do.call' lub innych miejscach, kiedy musisz podać bezpośrednio nazwę funkcji . – Marek

+0

dziękuję za udzielenie tej odpowiedzi. Nie jestem pewien, dlaczego, ale kiedy uruchomiłem tę funkcję, otrzymałem błąd "nie będącego znakiem". Jakieś myśli o tym, co by to spowodowało? – analyticsPierce

2

Spróbuj stringr

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

To rozwiązanie jest znacznie wolniejsze niż inne. Możesz to zobaczyć na 10 000 długości wektora. – Marek

+0

Udowodnij to! Plus dlaczego martwić się prędkością, chyba że musisz. – hadley

+0

dziękuję za odpowiedź. Przeszedłem przez twoje dokumenty dla tego pakietu i dostałbym dużo korzyści z tego. Jednak nie udało mi się go zainstalować. Używam Rbundle w textmate i wypróbowałem install.packages ("stringr", repos = "http://cran.r-project.org/src/contrib/stringr_0.3.tar.gz", type = "source "), wiadomość, którą otrzymałem, powiedziała, że ​​paczka była niedostępna. Przepraszam, jeśli to powinno być osobne pytanie. – analyticsPierce

Powiązane problemy