2010-06-09 26 views
5

Như trong ví dụ, tôi đang cố gắng để substring cột Video_full trong một data.frame (video_data_2) Tôi đang làm việc. Tôi muốn giữ tất cả các nhân vật sau thời gian này. Giai đoạn luôn luôn hiện diện, chỉ có một khoảng thời gian và nó ở một vị trí khác nhau trong mỗi giá trị cho cột.Làm cách nào để chỉ định vị trí động cho bắt đầu chuỗi con?

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

tôi đã substring để làm việc:

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

strsplit thêm:

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

Tôi chỉ không thể tìm ra cách để bắt đầu substring ở một vị trí năng động hay chỉ giữ giá trị thứ hai được trả về bởi strsplit.

Cảm ơn bạn đã trợ giúp bạn có thể cung cấp cho một câu hỏi đơn giản.

Trả lời

8

bạn có thể sử dụng phụ()

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

một cách tiếp cận sử dụng strsplit

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

Tương tự như câu trả lời đầu tiên được cung cấp bởi @Marek, tôi nhận được một 'lý lẽ phi nhân vật' lỗi khi tôi đã cố gắng này. Bất kỳ suy nghĩ về những gì có thể gây ra nó? – analyticsPierce

7

Một cách khác để sử dụng strsplit

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

mà là viết tắt từ

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

+1 Tôi thích sử dụng "[". Nó có nghĩa là gì? (và giải thích trong trợ giúp R ​​ở đâu?) –

+2

@ gd047 Toán tử chỉ mục "[" là một hàm và bạn có thể tiếp cận sự trợ giúp của nó bằng '?" ["' (hoặc 'trợ giúp (" [")'). Bạn có thể sử dụng nó như bất kỳ hàm nào khác ví dụ: '\' [\ '(chữ cái, 3: 5)', nhưng nó thực sự hữu ích trong các trường hợp như câu hỏi hoặc 'do.call' hoặc các địa điểm khác khi bạn phải trực tiếp cung cấp tên hàm . – Marek

+0

cảm ơn bạn đã cung cấp câu trả lời này. Tôi không chắc chắn lý do tại sao nhưng khi tôi chạy chức năng này, tôi nhận được một lỗi 'đối số phi ký tự'. Bất kỳ suy nghĩ về những gì sẽ gây ra điều đó? – analyticsPierce

2

Hãy thử stringr

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

Giải pháp này chậm hơn nhiều so với các giải pháp khác. Bạn có thể thấy điều này cho vectơ độ dài 10.000. – Marek

+0

Chứng minh điều đó! Cộng với lý do tại sao lo lắng về tốc độ, trừ khi bạn phải. – hadley

+0

cảm ơn bạn đã trả lời. Tôi đã đi qua tài liệu của bạn cho gói này và sẽ nhận được rất nhiều sử dụng trong số đó. Tuy nhiên, tôi không thể cài đặt nó. Tôi đang sử dụng Rbundle trong textmate và thử install.packages ("stringr", repos = "http://cran.r-project.org/src/contrib/stringr_0.3.tar.gz", type = "source "), tin nhắn tôi nhận được cho biết gói không có sẵn. Xin lỗi nếu đây là một câu hỏi riêng. – analyticsPierce

Các vấn đề liên quan