2012-12-22 39 views
6

Tôi có một vector dữ liệu, một phiên bản similified là dưới đây:Chuyển đổi bất cứ điều gì đó không phải là một số để trống

x <- c("1234123xcv?","12341534xxx.","hello","goodbye") 

Những gì tôi muốn làm là có nó trở lại như sau:

"1234123" "12341534" "" "" 

Tôi biết tôi có thể làm một cái gì đó như thế này, nơi tôi tự xác định mỗi chữ hoa/chữ thường và vài ký tự đặc biệt mà tôi biết:

grep("[A-Za-z\\?\\.]",x,value=TRUE) 

Nhưng tôi không biết những gì "khác" là trong lĩnh vực đó không nhất thiết phải là một số. (và không thể xem qua nó theo cách thủ công, vì nó quá lớn)

Với ý nghĩ đó, câu hỏi của tôi là: Có cách nào chỉ định rằng bạn muốn số CHỈ được trả lại trong gsub()?

+0

Số hoặc chữ số? "-1" là một số, như là "3,14", như là "1,2E07". – Spacedman

+0

Trong trường hợp cụ thể của tôi, nó chỉ là chữ số. Tôi không (tin) Tôi có bất kỳ số nào trong dữ liệu của tôi được định dạng như vậy. Việc làm theo nhiều giống như mô hình trong ví dụ trên. –

Trả lời

11
gsub("\\D","",x) # yada yada yada 
3

Bạn cần một cái gì đó như thế này:

[^0-9]* 

này sẽ phù hợp bất cứ điều gì đó không phải là một chữ số, không cần phải xác định những nhân vật.

5

Bên trong dấu ngoặc, ^ có nghĩa là không. Vì vậy, điều này nói bất cứ điều gì thay thế không phải là số với ""

> gsub("[^0-9]", "", x) 
[1] "1234123" "12341534" ""   "" 
4
gsub("[^[:digit:]]", "", x) #...... 
0

Bạn có thể sử dụng [\ d]. sẽ chỉ trả lại số.

+1

Er ,,,,, đây là R. –

+0

1. [] không cần thiết khi bạn có một phần tử duy nhất (nhưng bạn phải làm gì với nó?). 2. \ phải được thoát. –

2

tôi sẽ nói

gsub("[^0-9]+", "", x) 

[^ 0-9] sẽ thay thế chỉ có một nhân vật cùng một lúc và [^ 0-9] + một hoặc nhiều mà sẽ nhanh hơn.

+0

Sai. Nhìn vào đầu ra cho câu trả lời của tôi. Nó nói thay thế tất cả mọi thứ mà không phải là một số với '" "'. '+' Là không cần thiết. – GSee

+0

@Gsee, tôi không nghĩ anh ấy nói phiên bản của bạn sai. Chỉ cần phiên bản của anh ta sẽ thay thế ít hơn bằng cách thay thế bất kỳ chữ số không liên tiếp nào cùng một lúc. Đối với cùng một kết quả. Anh ta thậm chí còn có thể lập luận rằng nó có thể nhanh hơn theo cách này ... Dù sao, việc đưa nó vào một bình luận sẽ tốt hơn trong quan điểm của tôi. – flodel

+0

@flodel. Điểm tốt. Và w_g không có đủ đại diện để lại nhận xét. Tôi sẽ chỉnh sửa để tôi có thể bỏ ghi chú. – GSee

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