2011-10-11 45 views
1

创建子矩阵具有给定多个条件我有R中的下面的矩阵(实际上是一个数据帧):如何作为R

> str(x2) 
'data.frame': 274569 obs. of 15 variables: 
$ ykod : int 99 99 99 99 99 99 99 99 99 99 ... 
$ yad : Factor w/ 43 levels "BAKUGAN","BARBIE",..: 2 2 2 2 2 2 2 2 2 2 ... 
$ per : Factor w/ 3 levels "2 AYLIK","3 AYLIK",..: 3 3 3 3 3 3 3 3 3 3 ... 
$ donem: int 201106 201106 201106 201106 201106 201106 201106 201106 201106 201106 ... 
$ sayi : int 201106 201106 201106 201106 201106 201106 201106 201106 201106 201106 ... 
$ mkod : int 359 361 362 363 366 847 849 850 1505 1506 ... 
$ mad : Factor w/ 11045 levels " Hilal Gida   ",..: 5163 3833 10840 8284 10839 2633 10758 10293 6986 6984 ... 
$ mtip : Factor w/ 30 levels "Abone Bürosu          ",..: 20 20 20 20 20 2 2 2 11 11 ... 
$ kanal: Factor w/ 2 levels "OB","SS": 2 2 2 2 2 2 2 2 1 1 ... 
$ bkod : int 110006 110006 110006 110006 110006 110006 110006 110006 110006 110006 ... 
$ bad : Factor w/ 213 levels "4. Levent","500 Evler",..: 25 25 25 25 25 25 25 25 25 25 ... 
$ bolge: Factor w/ 12 levels "Adana Şehiriçi",..: 7 7 7 7 7 7 7 7 7 7 ... 
$ sevk : int 5 2 2 2 10 0 4 3 13 32 ... 
$ iade : int 0 2 1 2 4 0 3 2 0 8 ... 
$ satis: int 5 0 1 0 6 0 1 1 13 24 ... 

我想从该主数据帧创建子集。例如,我需要满足多个条件的子矩阵,如 ykod = 123donem = 201109sevk > 20satis > 10

我该如何做到这一点?

+2

尝试使用'subset'。在你的情况下,它会是子集(x2,ykod == 123&donem == 201109&sevk> 20&satis> 10)' – Ramnath

+0

相关:http://stackoverflow.com/q/4935479/210673 – Aaron

回答

3
x2[x2$ykod == 123 & x2$donem == 201109 & x2$sevk > 20 & x2$satis > 10,] 

,或者把它缩短:

with(x2, x2[ykod == 123 & donem == 201109 & sevk > 20 & satis > 10,]) 

,或者,如果列被附加到全局变量(与attach(x2)),你可以 只写

x2[ykod == 123 & donem == 201109 & sevk > 20 & satis > 10,] 

,如果你只需要列ykod和yad:

x2[x2$ykod == 123 & x2$donem == 201109 & x2$sevk > 20 & x2$satis > 10, c('ykod', 'yad')] 

,如果你只想要第4列(我这里缩短条件):

x2[x2$ykod == 123, 1:4] 
3

如果像我一样,你是更简便与SQL比R数据帧你可以使用sqldf

require(sqldf) 
x2_subset <- sqldf( 
    "SELECT * FROM x2 
    WHERE ykod = 123 
     AND donem = 201109 
     AND sevk > 20 
     AND satis > 10") 

作为一个奖励,它应该是更快的大数据帧或复杂的操作。