【问题标题】:Creating a table() of counts using a frequency column使用频率列创建计数表()
【发布时间】:2019-04-09 15:35:15
【问题描述】:

我已经从HairEyeColor 数据中创建了数据

HEC = as.data.frame(HairEyeColor)

这是生成带有频率列的数据框的快速方法,这是我的情况。

我需要创建类似这样的列联表:

          colhair
coleye black blond brunette red
blue      20    94       84  17
brown     68     7      119  26
green      5    16       29  14
hazel     15    10       54  14

注意:我不是在询问如何使用现有的 HairEyeColor 数据表,而是使用具有频率列的数据框。

我尝试了几种table()xtabs() 和aggregate(),我能做的最好的就是得到行数。我似乎无法有效地使用频率列。

解决方案是需要的。

【问题讨论】:

  • 发布了答案,但只是此特定数据集的解决方法,HairEyeColor[,,1]+HairEyeColor[,,2]

标签: plyr r


【解决方案1】:

我们先汇总然后spread进行分组

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

也可以单线完成

xtabs(Freq ~ Eye + Hair, HEC)

【讨论】:

    【解决方案2】:

    我们可以使用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
    


    或者使用data.table包:

    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
    

    要以交叉表格式获取它:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多