2012-01-03 23 views
5

Tôi có một cột trong một khung dữ liệu nơi các giá trị là các kết hợp chữ số như G1, K8, A132, v.v. Tôi muốn chia chữ số đó nhưng giữ lại số một số duy nhất. Tôi đã được sử dụng strsplit nhưng điều này đưa ra một danh sách các giá trị như bên dưới nơi tôi sẽ liek để có đầu ra của G10:chia một ký tự từ một số có nhiều chữ số

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

điều này dẫn đến những vấn đề hạ lưu có thể dự đoán khi tôi cố gắng sử dụng những con số như số. Dưới đây là ví dụ về paste nơi tôi muốn nhận "somethingelse_10":

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

Có cách nào dễ dàng để tách số khỏi các chữ cái không?

+0

là định dạng luôn một chữ cái tiếp theo một số số? – Dason

+1

trong trường hợp này chỉ có một chữ cái duy nhất trước một số một hoặc nhiều chữ số. – zach

Trả lời

8

Các stringr gói thường có chức năng thuận tiện cho các loại điều này:

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

Đó là giả định rằng mỗi phần tử có chính xác một "chữ" phần, và một "số" một phần, vì str_extract chỉ là kéo ví dụ đầu tiên của trận đấu.

+0

cảm ơn. hoạt động tốt. – zach

13

Bạn có thể sử dụng gsub để loại bỏ tất cả các phi chữ số, chữ số hoặc toàn bộ chữ như sau:

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

Và sau đó bạn có thể sử dụng as.numeric để chuyển đổi từ chuỗi số, nếu bạn mong muốn.

+0

cảm ơn aaronjg. điều này cũng rất tuyệt. – zach

+0

Bạn có thể thêm một giải pháp để trích xuất các chữ cái (xem câu trả lời của joran). Trong thực tế, người ta có thể viết một hàm để trích xuất các chữ cái và số và có 'apply' làm việc trên cột data.frame. :) –

+1

@aaronjg để nhận các chữ cái bạn cần thêm một cặp [] – zach

3

Nếu như nhận xét của bạn cho thấy bạn chỉ có một chữ cái tiếp theo một hoặc nhiều chữ số bạn có thể làm một cái gì đó tương tự như sau:

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 
Các vấn đề liên quan