2012-01-03 13 views
5

मेरे पास डेटाफ्रेम में एक कॉलम है जहां मान पत्र संख्या संख्या जैसे जी 1, के 8, ए 132 आदि हैं। मैं पत्र को संख्या से विभाजित करना चाहता हूं लेकिन संख्या को बनाए रखना चाहता हूं एक नंबर मैं strsplit उपयोग किया गया है, लेकिन इस मानों की सूची के रूप में मैं कहाँ G और 10 के उत्पादन के लिए चाहेंगे कि नीचे दिखाई दे देता है:कई अंकों के साथ एक संख्या से एक वर्ण विभाजित

x <- "G10" 
strsplit(x, "")[[1]][1] 
"G" 
strsplit(x, "")[[1]][-1] 
"1" "0" 

इस उम्मीद के मुताबिक नीचे की ओर समस्याओं को जन्म देता है जब मैं के रूप में नंबरों का उपयोग करने का प्रयास करें संख्या।

z <-strsplit(x, "")[[1]][-1] 
paste("somethingelse",z, sep="_") 
"somethingelse_1" "somethingelse_0" 

वहाँ एक आसान तरीका पत्र से संख्या को विभाजित करने की है: यहाँ एक paste उदाहरण है जहाँ मैं "somethingelse_10" प्राप्त करना चाहते हैं क्या है?

+0

प्रारूप हमेशा कुछ नंबर के बाद एक भी पत्र है? – Dason

+1

इस मामले में कई एक या अधिक अंकों से पहले केवल एक ही अक्षर है। – zach

उत्तर

8

stringr पैकेज अक्सर बात की इस तरह के लिए सुविधाजनक कार्य करता है:,

require(stringr) 
str_extract(c("A1","B2","C123"),"[[:upper:]]") 
#[1] "A" "B" "C" 
str_extract(c("A1","B2","C123"),"[[:digit:]]+") 
#[1] "1" "2" "123" 

मान लिया गया है कि प्रत्येक तत्व ठीक एक "पत्र" हिस्सा है, और एक "संख्या" भाग के बाद से str_extract बस है एक मैच का पहला उदाहरण खींच रहा है।

+0

धन्यवाद। यह बहुत अच्छा काम करता है। – zach

13

तुम इतनी तरह सभी गैर अंकों, या सभी अंकों पात्रों को खत्म करने gsub उपयोग कर सकते हैं:

> x <- "A3" 
> gsub("[^[:digit:]]","",x) 
"3" 
> gsub("[:digit:]","",x) 
"A" 

और फिर आप as.numeric उपयोग कर सकते हैं स्ट्रिंग से संख्या में बदलने के लिए, यदि आप चाहें।

+0

धन्यवाद aaronjg। यह भी महान काम करता है। – zach

+0

आप अक्षरों को निकालने के लिए एक समाधान जोड़ सकते हैं (जोरन का जवाब देखें)। वास्तव में, कोई अक्षर और संख्या निकालने के लिए एक फ़ंक्शन लिख सकता है और डेटा.फ्रेम कॉलम पर 'लागू' कार्य कर सकता है। :) –

+1

@Aaronjg अक्षरों को पाने के लिए आपको एक अतिरिक्त जोड़ी की आवश्यकता है [] – zach

3

तो अपनी टिप्पणी से पता चलता है के रूप में आप सिर्फ एक या अधिक संख्याएं आप इस के लिए इसी तरह कुछ कर सकते हैं, जिसके बाद एक भी पत्र है:

x <- c("G10", "X1231", "y14522") 
# Just grab the first letter 
letter <- substring(x, 1, 1) 
letter 
# [1] "G" "X" "y" 
# Grab everything except the first character and convert to numeric 
number <- as.numeric(substring(x, 2, nchar(x))) 
number 
#[1] 10 1231 14522 
संबंधित मुद्दे