2012-12-22 21 views
6

मैं डेटा का एक वेक्टर के लिए एक नंबर नहीं है कन्वर्ट, एक similified संस्करण नीचे है:कुछ भी है कि खाली

"1234123" "12341534" "" "" 
:

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

मैं करना चाहते हैं क्या इसे वापस निम्न होना है

मैं जानता हूँ कि मैं कुछ इस तरह है, जहां मैं मैन्युअल रूप से प्रत्येक ऊपरी/लोअर केस अक्षरों और कुछ विशेष वर्ण है कि मैं के बारे में पता कर रहा हूँ निर्दिष्ट कर सकते हैं:

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

लेकिन मुझे नहीं पता कि क्षेत्र में "और" क्या है जो आवश्यक रूप से एक संख्या नहीं है। (और इसे मैन्युअल रूप से नहीं देख सकता है, क्योंकि यह बहुत बड़ा है)

इस बात को ध्यान में रखते हुए मेरा प्रश्न है: क्या यह निर्दिष्ट करने का कोई तरीका है कि आप केवल gsub() में वापस आने की संख्या चाहते हैं?

[^0-9]* 

यह कुछ भी है कि एक अंकों नहीं है से मेल खाएगी, जो चरित्र निर्दिष्ट करने के लिए कोई जरूरत नहीं:

+0

संख्या या अंक? "-1" एक संख्या है, जैसा कि "3.14" है, जैसा कि "1.2E07" है। – Spacedman

+0

मेरे विशेष मामले में, यह केवल अंक है। मुझे विश्वास नहीं है (मेरे पास) मेरे डेटा में कोई संख्या है जो इस तरह स्वरूपित हैं। ऊपर दिए गए उदाहरण में पैटर्न के समान ही पालन करें। –

उत्तर

3

आप कुछ इस तरह की जरूरत है।

5

ब्रैकेट के अंदर, ^ का मतलब नहीं है। तो, यह बदलने के लिए जो भी साथ कोई अंक नहीं है कहते हैं, ""

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

आप [\ d] का उपयोग कर सकते हैं। केवल संख्या वापस कर देगा।

+1

एर ,,,, यह आर –

+0

1. [] आवश्यक नहीं है जब आपके पास एक तत्व हो (लेकिन आप इसके साथ क्या कर रहे हैं?)। 2. \ बच जाना चाहिए। –

2

मैं कहूंगा कि

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

[^ 0-9] एक बार में केवल एक ही चरित्र और [^ 0-9] + एक या अधिक जो तेजी से हो जाएगा की जगह लेगा।

+0

झूठा। मेरे जवाब में आउटपुट देखें। यह कहता है कि वह सबकुछ बदलें जो '' '' 'के साथ एक संख्या नहीं है। '+' अनावश्यक है। – GSee

+0

@ जीसी, मुझे नहीं लगता कि वह कह रहा था कि आपका संस्करण गलत था। बस एक ही बार में लगातार किसी भी गैर-अंकों को प्रतिस्थापित करके उसका संस्करण कम प्रतिस्थापन करेगा। एक ही परिणाम के लिए। वह यह भी तर्क दे सकता था कि यह इस तरह से तेज़ हो सकता है ... वैसे भी, एक टिप्पणी में यह मेरी राय में बेहतर होगा। – flodel

+0

@flodel। अच्छी बात। और w_g में अभी तक टिप्पणियां छोड़ने के लिए पर्याप्त प्रतिनिधि नहीं हैं। मैं संपादित करूंगा ताकि मैं अन-डाउनवोट कर सकूं। – GSee

संबंधित मुद्दे