为什么子集在R中不起作用?

时间:2014-02-24 04:02:35

标签: r subset

我有一个数据框'vissim',其结构如下:

> str(vissim)
'data.frame':   480 obs. of  12 variables:
 $ Measur.                : int  1 2 3 4 5 6 7 8 9 10 ...
 $ from                   : int  100 100 100 100 100 100 100 100 100 100 ...
 $ to                     : int  130 130 130 130 130 130 130 130 130 130 ...
 $ Occup..Rate.Trucks     : num  2.9 NA NA NA NA 1 NA NA NA NA ...
 $ Speed.Mean.Trucks      : num  51.4 NA NA NA NA 50.7 NA NA NA NA ...
 $ Number.Veh.Trucks      : int  2 NA NA NA NA 1 NA NA NA NA ...
 $ Occup..Rate.Motorcycles: num  NA 0.7 NA NA NA NA NA 0.4 NA NA ...
 $ Speed.Mean.Motorcycles : num  NA 57.7 NA NA NA NA NA 64.2 NA NA ...
 $ Number.Veh.Motorcycles : int  NA 2 NA NA NA NA NA 1 NA NA ...
 $ Occup..Rate.Car        : num  6.8 3.3 NA NA NA 5.6 2.3 1.2 0.4 0.6 ...
 $ Speed.Mean.Car         : num  58.2 57.5 NA NA NA 60 63.5 64.5 60 55.6 ...
 $ Number.Veh.Car         : int  12 6 NA NA NA 11 5 2 1 1 ...

当我使用'Measur'对其进行子集化时。变量以及以下标准,它工作正常:

> updatav <- subset(vissim, Measur.==c(1,2,3,4,5))  

但是当我使用相同的变量但不同的标准再次进行子集时,它会产生以下错误:

> bwdatav <- subset(vissim, Measur.==c(6,7,8,9,10,11))
> head(bwdatav)
 [1] Measur.                 from                    to                      Occup..Rate.Trucks     
 [5] Speed.Mean.Trucks       Number.Veh.Trucks       Occup..Rate.Motorcycles Speed.Mean.Motorcycles 
 [9] Number.Veh.Motorcycles  Occup..Rate.Car         Speed.Mean.Car          Number.Veh.Car         
<0 rows> (or 0-length row.names)

当数据框'vissim'显然有'Measur'行时,不知道为什么会说'0行'。 6到11.有什么想法吗?

1 个答案:

答案 0 :(得分:3)

当您使用==时,您正在使用%in%

updatav <- subset(vissim, Measur. %in% c(1,2,3,4,5))  

(这与子集无关。)

==意味着“措施”中的平等和无关。列将按该顺序等于所有这些值。