2015-01-21 63 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