如何在R中创建具有给定多个标准的子矩阵

时间:2011-10-11 12:42:21

标签: r matrix dataframe

我在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 = 201109以及sevk > 20satis > 10

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:3)

如果像我一样,你使用SQL比R数据框更方便,你可以使用sqldf

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

作为奖励,大数据帧或复杂操作也应该更快。