2013-06-17 4 views
3

У меня есть две матрицы с данными таймсерийфункция SUMIF в R двух матриц

A 
2 1 0 
0 1 6 
1 4 6 

B 
1 1 3 
4 2 8 
2 5 1 

Я хочу, чтобы создать вектор сравнения А и В и удовлетворяющих следующим критериям:

Если B < 3, то просуммировать элементы А по строкам, которые следуют критериям
Так что мой результат матрица должна быть

C 
3 (=2+1) 
1 
7 (=1+6) 

Я попытался сделать это было следующим образом, но я не смог получить правильные результаты.

posneg_fun<-function(x,y) 
{ 
    new<-sum(x[y<3]) 
    return(new) 
} 

out<-t(apply(x,1,FUN=posneg_fun,y)) 

любые идеи?

спасибо

+0

, если вы чувствуете, что ответ опубликован ниже, решает вашу проблему, вы должны рассмотреть щелчок на галочке, чтобы принять его ... –

+0

просто сделал! спасибо, что сообщили мне, я не знал – user2493820

ответ

2

Как насчет:

A[B>=3] <- NA 
rowSums(A,na.rm=TRUE) 
## [1] 3 1 7 

или @ предложение Роланда (даже короче):

rowSums(A*(B<3)) 

который использует тот факт, что TRUE получает принуждается к 1 и FALSE при выполнении числовых операций принудительно достигает 0 ...

+3

или 'rowSums (A * (B <3))' – Roland

+0

это здорово! большое спасибо за быстрый ответ! – user2493820