2015-12-20 47 views
0

我的数据如下所示。按R中数字的前两位数进行筛选

AK ALASKA DEPT OF PUBLIC SAFETY 1005-00-073-9421 RIFLE,5.56 MILLIMETER  
AK ALASKA DEPT OF PUBLIC SAFETY 1005-00-073-9421 RIFLE,5.56 MILLIMETER 

我正在寻找以多种不同方式过滤数据。例如,我通过设备的类型过滤,如第4列,以代号

rifle.off <- city.data[[i]][city.data[[i]][,4]=="RIFLE,5.56 MILLIMETER",] 

凡city.data是与来自31个城市(数据矩阵的列表,以便我通过迭代for循环以分离每个城市的步枪数据)。我也想按第三栏中的数字进行过滤。具体来说,我只需要过滤前两位数字,即我想隔离第3列中的数字以“10”开头的所有行项目。我将如何修改我的上面的代码,以隔离只有前两位数字,但让所有其他数字是什么?

编辑:提供请求的city.data矩阵示例。首先关闭city.data是一个列表:

city.data <- list(albuq, austin, baltimore, charlotte, columbus, dallas, dc, denver, detroit) 

其中每个城市名称是一个矩阵。警察局使用以下方法隔离每个单独的矩阵:

phoenix <- vector() 
for (i in 1:nrow(gun.mat)){ 
    if (gun.mat[i,2]=="PHOENIX DEPT OF PUBLIC SAFETY"){ 
    phoenix <- rbind(gun.mat[i,],phoenix) 
    } 
} 

其中gun.mat只是包含所有观察值的原始矩阵。凤凰看起来像

state   police.dept     nsn    type  quantity price date.shipped name 
AZ PHOENIX DEPT OF PUBLIC SAFETY 1240-01-411-1265 SIGHT,REFLEX 1  331 1 3/29/13 OPTICAL SIGHTING AND RANGING EQUIPMENT 
AZ PHOENIX DEPT OF PUBLIC SAFETY 1240-01-411-1265 SIGHT,REFLEX 1  331 1 3/29/13 OPTICAL SIGHTING AND RANGING EQUIPMENT 
AZ PHOENIX DEPT OF PUBLIC SAFETY 1240-01-411-1265 SIGHT,REFLEX 1  331 1 3/29/13 OPTICAL SIGHTING AND RANGING EQUIPMENT 
+0

我们可以看一下'city.data'矩阵的例子吗? – MaxPD

+0

@ user2923027完成。 – thyde

回答

2

试试这个:
你在问题的第一块具有原始数据。子集。

Rifle556<-subset(data, data$column4 == "RIFLE,5.56 MILLIMETER") 

之后,再次子集数据从第3列

s <- '10' 
Rifle55610<-subset(Rifle556, grep(s, column3, invert=T) 

开始以“10”这样,你根据你的病情有数据子集。

+0

感谢您的回复。你为什么设置反转条件= T?除了第3列中以“10”开头的那些观测值之外,是不是会创建一个子集? – thyde

+0

是不是你想要的? – MaxPD

+0

哦,不,我希望所有以第3列中的'10'开始的观察结果,所以我只是将其保留为假。对不起,并再次感谢。 – thyde