Как создать подматрицы с заданными множественными критериями в R - PullRequest
1 голос
/ 11 октября 2011

У меня есть следующая матрица (фактически фрейм данных) в 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 = 123 и donem = 201109 и sevk > 20 и satis > 10.

Как мне этого добиться?

Ответы [ 2 ]

3 голосов
/ 11 октября 2011

Если, как и я, вы удобнее с SQL, чем с фреймами данных R, вы можете использовать sqldf:

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

В качестве бонуса он должен быть быстрее с большими фреймами данных или сложными операциями.

3 голосов
/ 11 октября 2011
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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...