2013-02-09 56 views
6

Làm cách nào bạn trích xuất tất cả các ký tự lên đến một ký tự được chỉ định? Ví dụ được đưa ra, tôi muốn trích xuất mọi thứ trước "." (Thời gian):Trích xuất ký tự từ chuỗi

a<-c("asdasd.sss","segssddfge.sss","se.sss") 

Tôi muốn để có được trở lại:

asdasd segssddfge se 

tôi đã cố gắng:

substr(a,1,".") 

nhưng nó dường như không làm việc.

bất kỳ ý tưởng nào?

+0

của một tập tin csv do đó chỉ nên là một "" – user1234440

Trả lời

7

Dưới đây là một cách tiếp cận rất cơ bản:

sapply(strsplit(a, "\\."), `[[`, 1) 
# [1] "asdasd"  "segssddfge" "se" 

Và khác:

sub(".sss", "", a, fixed = TRUE) 
# [1] "asdasd"  "segssddfge" "se" 
## OR sub("(.*)\\..*", "\\1", a) 
## And possibly other variations 
+1

@Arun, quên để thêm "' cố định = TRUE'" đó là cách tiếp cận tôi đã dựa trên các giả định (có thể bị lỗi) về dữ liệu của OP. Cảm ơn. – A5C1D2H2I1M1N2O1R2T1

4

Sử dụng sub:

# match a "." (escape with "\" to search for "." as a normal "." 
# means "any character") followed by 0 to any amount of characters 
# until the end of the string and replace with nothing ("") 
sub("\\..*$", "", a) 

Sử dụng subtrgregexpr (giả sử chỉ có 1 . và có một trận đấu xác định trong tất cả các trận đấu ngs trong vector).

# get the match position of a "." for every string in "a" (returns a list) 
# unlist it and get the substring of each from 1 to match.position - 1 
substr(a, 1, unlist(gregexpr("\\.", a)) - 1) 
2

Dưới đây là một nỗ lực sử dụng gsub

gsub(pattern='(.*)[.](.*)','\\1', c("asdasd.sss","segssddfge.sss","se.sss")) 
[1] "asdasd"  "segssddfge" "se"   
Các vấn đề liên quan