2015-01-21 66 views
3

我有一個非常大的變量數據集,我需要基於前三個郵編的數字子集。我不知道如何做到這一點,並會感謝您可以提供任何幫助。基於前三個數字的子集

我將如何子集這個示例dput刪除所有以721開頭的郵政編碼。請注意,我不能簡單地做一個比(>)大的郵政編碼,因爲郵政編碼大於721謝謝!

dput:

data <- structure(list(state = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("AR", 
    "IL", "MO"), class = "factor"), zip = c(72003L, 72042L, 72073L, 
    72166L, 72038L, 72055L, 72160L, 72026L, 72048L, 72140L, 72003L, 
    72042L, 72073L, 72166L, 72038L, 72055L, 72160L, 72026L, 72048L, 
    72140L)), .Names = c("state", "zip"), row.names = c(NA, 20L), class = "data.frame") 

數據:

state zip 
1  AR 72003 
2  AR 72042 
3  AR 72073 
4  AR 72166 
5  AR 72038 
6  AR 72055 
7  AR 72160 
8  AR 72026 
9  AR 72048 
10 AR 72140 
11 AR 72003 
12 AR 72042 
13 AR 72073 
14 AR 72166 
15 AR 72038 
16 AR 72055 
17 AR 72160 
18 AR 72026 
19 AR 72048 
20 AR 72140 

回答

5

您可以嘗試substr

data[substr(data$zip, 1,3)!=721,] 

或者使用data.table

library(data.table) 
setDT(data)[substr(zip,1,3)!=721] 

或者dplyr

library(dplyr) 
data %>% 
     filter(substr(zip, 1,3)!=721) 

或者使用extracttidyr

library(tidyr) 
extract(data, zip, 'zip1', '(...).*', FALSE) %>% 
           filter(zip1!=721) %>% 
           select(-zip1) 
+0

感謝akrun。這可能通過'filter'來處理dplyr嗎? – Vedda 2015-01-21 06:08:31

+0

@Amstell你也可以在'filter'裏面使用同樣的命令。請檢查更新 – akrun 2015-01-21 06:10:38

+0

再次感謝....這是完美的! – Vedda 2015-01-21 06:26:48