2012-10-26 56 views
9

Tôi đang cố gắng làm điều gì đó nhưng không thể nhớ/tìm câu trả lời. Tôi có một danh sách tên thành phố từ Cục điều tra dân số và họ đặt loại thành phố vào cuối mà đang rối tung lên của tôi match().R xóa từ cuối cùng khỏi chuỗi

Tôi muốn làm cho điều này:

Middletown Township 
Sunny Valley Borough 
Hillside Village 

vào đây:

Middletown 
Sunny Valley 
Hillside 

Bất kỳ lời đề nghị? Lý tưởng nhất là tôi cũng muốn biết nếu có một hàm lastIndexOf() trong R.

Đây là dput:

> dput(df1) 
structure(list(id = c(1, 2, 3), city = structure(c(2L, 3L, 1L 
), .Label = c("Hillside Village", "Middletown Township", "Sunny Valley Borough" 
), class = "factor")), .Names = c("id", "city"), row.names = c(NA, 
-3L), class = "data.frame") 

Trả lời

15

này sẽ làm việc:

gsub("\\s*\\w*$", "", df1$city) 
[1] "Middletown" "Sunny Valley" "Hillside" 

Nó loại bỏ bất kỳ chuỗi con gồm một hoặc nhiều chararacters không gian hơn, theo sau là bất kỳ số ký tự "word" nào (dấu cách, số hoặc dấu gạch dưới), sau đó là phần cuối của chuỗi.

+0

Điều gì xảy ra nếu tôi muốn nhận "Thị trấn, Borough, Village" tức là từ cuối cùng. Và lưu nó như một biến mới? – jacob

+1

Bạn có thể sử dụng gói stringi. Tên hàm là stri_extract_last_words. Bạn có thể cung cấp chức năng này một danh sách các câu và nó sẽ trả về danh sách các từ cuối cùng trong các câu đó. Tuy nhiên, nó sẽ không loại bỏ từ cuối cùng khỏi câu, để loại bỏ mục đích, chúng ta cần lệnh gsub được cung cấp bởi Josh – rkmalaiya

12

Dưới đây là một regexp mà những gì bạn cần:

sub(df1$city, pattern = " [[:alpha:]]*$", replacement = "") 

[1] "Middletown" "Sunny Valley" "Hillside"

Đó là thay thế một chuỗi con bắt đầu với một không gian , sau đó chỉ chứa các chữ cái cho đến cuối chuỗi, với một chuỗi rỗng.

+0

+1 regex này là câu trả lời tốt hơn vì nó để lại một từ còn nguyên vẹn. – topchef

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