[R] equivalent of excel "sumif"

Henrique Dallazuanna wwwhsd at gmail.com
Tue Mar 4 15:53:15 CET 2008


You can try this:

newData <- lapply(list(df1, df2), function(x)split(x[-1], x$lgdcm))
do.call('rbind', lapply(names(newData[[1]]),
                     function(x)newData[[1]][[x]]+newData[[2]][[x]]))

On 04/03/2008, Luis Ridao Cruz <Luisr at frs.fo> wrote:
> R-help,
>
>  I have two data frames df1 and df2:
>
>  >head(df1)
>   lgdcm 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
>      0 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0
>      1 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0
>      2 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0
>      3 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0
>      4 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0
>      5 0 0 0 0 0 0 0 0 0 0  0  0  0  0  0  0
>  ...
>  ...
>
>  > head(df2)
>   lgdcm  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
>        34 NA NA  1 NA NA NA NA NA NA NA NA NA NA NA NA NA
>        36 NA NA  1 NA NA NA NA NA NA NA NA NA NA NA NA NA
>        40 NA NA  1  1 NA NA NA NA NA NA NA NA NA NA NA NA
>        41 NA NA NA NA  3 NA NA NA NA NA NA NA NA NA NA NA
>        42 NA NA NA NA  7 NA NA NA NA NA NA NA NA NA NA NA
>        43 NA NA NA  1  6 NA NA NA NA NA NA NA NA NA NA NA
>  ....
>  ....
>
>  I want to fill up the columns of df1 (0,1,2,,,,15)
>  with columns from df2 (0,1,2,,,,15) with column 'lgdcm' as the
>  criterion for matching.
>
>  There is a function in excel which does this type of thing, something
>  like:
>  SUMIF(range,criteria,sum_range)
>
>  Can anyone help with this?
>
>  Thanks in advance.
>
>  ______________________________________________
>  R-help at r-project.org mailing list
>  https://stat.ethz.ch/mailman/listinfo/r-help
>  PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>  and provide commented, minimal, self-contained, reproducible code.
>


-- 
Henrique Dallazuanna
Curitiba-Paraná-Brasil
25° 25' 40" S 49° 16' 22" O



More information about the R-help mailing list