Collapsing a data frame over one variable

后端 未结 3 926
[愿得一人]
[愿得一人] 2021-01-27 14:26

I have a data frame in the following format:

Site    Year    Month   Count1  Count2  Count3  Patch
1        1        May     15      12      10      1
1        1         


        
相关标签:
3条回答
  • 2021-01-27 14:59

    Or data.table solution (which will keep your data sorted by the original month order)

    library(data.table)
    setDT(df)[, lapply(.SD, sum), 
                by = list(Site, Year, Month), 
                .SDcols = paste0("Count", seq_len(3))]
    
    #    Site Year Month Count1 Count2 Count3
    # 1:    1    1   May     30     17     18
    # 2:    1    1  June     23     11      6
    # 3:    1    1  July      4      0      3
    
    0 讨论(0)
  • 2021-01-27 15:07

    With aggregate:

    > ( a <- aggregate(.~Site+Year+Month, dat[-length(dat)], sum) )
    #   Site Year Month Count1 Count2 Count3
    # 1    1    1  July      4      0      3
    # 2    1    1  June     23     11      6
    # 3    1    1   May     30     17     18
    

    Where dat is your data.

    Note that your July results in the post are seem to be incorrect.

    For the result in the order of the original data, you can use

    > a[order(as.character(unique(dat$Month))), ]
    #   Site Year Month Count1 Count2 Count3
    # 3    1    1   May     30     17     18
    # 2    1    1  June     23     11      6
    # 1    1    1  July      4      0      3
    
    0 讨论(0)
  • 2021-01-27 15:11
    library(dplyr) 
    dat %>% 
    group_by(Site, Year, Month) %>% 
    summarise_each(funs(sum=sum(., na.rm=TRUE)), Count1:Count3)
    # Source: local data frame [3 x 6]
    #Groups: Site, Year
    
    #    Site Year Month Count1 Count2 Count3
    #  1    1    1  July      4      0      3  
    #  2    1    1  June     23     11      6
    #  3    1    1   May     30     17     18
    
    0 讨论(0)
提交回复
热议问题