Creating a table() of counts using a frequency column

后端 未结 2 1975
悲&欢浪女
悲&欢浪女 2021-01-22 12:20

I\'ve got data created from the HairEyeColor data

HEC = as.data.frame(HairEyeColor)

which is

相关标签:
2条回答
  • 2021-01-22 12:41

    We do a group by summarise and then spread

    library(tidyerse)
    HEC %>% 
        group_by(Hair, Eye) %>% 
        summarise(Freq = sum(Freq)) %>%
        spread(Eye, Freq)
    

    It can be also done in a one-liner

    xtabs(Freq ~ Eye + Hair, HEC)
    
    0 讨论(0)
  • 2021-01-22 12:58

    We can do it with tapply():

    tapply(HEC$Freq, list(ColHair=HEC$Hair,ColEye=HEC$Eye), sum)
    
    
      #         ColEye
      # ColHair Brown Blue Hazel Green
      # Black    68   20    15     5
      # Brown   119   84    54    29
      # Red      26   17    14    14
      # Blond     7   94    10    16
    


    Or using data.table package:

    library(data.table)
    setDT(HEC)[,list(Freq=sum(Freq)),by=list(Hair, Eye)]
    
      #     Hair    Eye    Freq
      # 1:  Black   Brown   68
      # 2:  Brown   Brown  119
      # 3:    Red   Brown   26
      # 4:  Blond   Brown    7
      # 5:  Black   Blue    20
      # 6:  Brown   Blue    84
      # 7:    Red   Blue    17
      # 8:  Blond   Blue    94
      # 9:  Black   Hazel   15
      # 10: Brown   Hazel   54
      # 11:   Red   Hazel   14
      # 12: Blond   Hazel   10
      # 13: Black   Green    5
      # 14: Brown   Green   29
      # 15:   Red   Green   14
      # 16: Blond   Green   16
    

    To get it in cross-tab format:

    HEC_tab <- dcast(setDT(HEC)[,list(Freq=sum(Freq)),by=list(Hair, Eye)], 
                                             Hair~Eye, value.var = "Freq")
    
    setnames(HEC_tab , c("HairCol/EyeCol", names(HEC_tab)[-1]))
    
    HEC_tab
    
      #   HairCol/EyeCol Brown Blue Hazel Green
      # 1:         Black    68   20    15     5
      # 2:         Brown   119   84    54    29
      # 3:           Red    26   17    14    14
      # 4:         Blond     7   94    10    16
    
    0 讨论(0)
提交回复
热议问题