How to sum over diagonals of data frame

后端 未结 4 2332
温柔的废话
温柔的废话 2021-02-20 16:53

Say that I have this data frame:

     1   2   3   4      
100  8   12  5   14 
99   1   6   4   3   
98   2   5   4   11  
97   5   3   7   2   
<
4条回答
  •  闹比i
    闹比i (楼主)
    2021-02-20 17:09

    Here's a solution using stack(), and aggregate(), although it requires the second data.frame contain character vectors, as opposed to factors (could be forced with lapply(df2,as.character)):

    df1 <- data.frame(a=c(8,1,2,5), b=c(12,6,5,3), c=c(5,4,4,7), d=c(14,3,11,2) );
    df2 <- data.frame(a=c('A','B','C','D'), b=c('B','C','D','E'), c=c('C','D','E','F'), d=c('D','E','F','G'), stringsAsFactors=F );
    aggregate(sum~group,data.frame(sum=stack(df1)[,1],group=stack(df2)[,1]),sum);
    ##   group sum
    ## 1     A   8
    ## 2     B  13
    ## 3     C  13
    ## 4     D  28
    ## 5     E  10
    ## 6     F  18
    ## 7     G   2
    

提交回复
热议问题