【问题标题】:How can I check whether data has an equal number of observations per group?如何检查数据是否每组具有相同数量的观察值?
【发布时间】:2012-05-02 23:48:12
【问题描述】:

我正在编写一些代码,我需要检查给定数据输入的所有组大小是否相等。例如,假设我想知道“mpg”数据集(在 ggplot2 包中)是否有:

  • 每个制造商的汽车数量相同
  • 每种驱动类型(4 轮、前轮、后轮)的汽车数量相同
  • 每种发动机类型(4 缸、6 缸、8 缸)的汽车数量相同

对于像mpg这样的数据,其中一些问题可以通过检查摘要输出来回答

library(ggplot2)   # contains the mpg dataset
summary(mpg$drive) # shows the breakdown of cars by drive-type, 
                   # which we can verify is unequal

但我觉得我缺少一种检查组大小是否相等的简单方法。有没有像are.groups.of.equal.size(x) 这样的单一的、神秘的函数?还是返回此类信息的另一个基本函数(或它们的组合)?

【问题讨论】:

  • table? aggregate? ddply?有很多方法可以做到这一点。
  • @joran - 我正在尝试使其自动化,因此该解决方案基本上会返回一个关于组大小是否相等的布尔值。我如何使用table、aggregate 或ddply 来实现这一目标?
  • table() 返回一个向量。只需检查该向量的所有元素是否相等。 sd() 将是一种快速的方法。

标签: r


【解决方案1】:

这是一种方法:

are.groups.of.equal.size <- function(x)length(unique(table(x))) == 1L

are.groups.of.equal.size(mpg$manufacturer)
# [1] FALSE
are.groups.of.equal.size(mpg$drv)
# [1] FALSE
are.groups.of.equal.size(mpg$year)
# [1] TRUE

请注意,如果需要,table 可以选择如何处理数据中的 NAs。

【讨论】:

    【解决方案2】:

    正如 Joran 所说,从这里到圣诞节,我们可以发明 100 多种方法来解决这个问题。我闻到了微基准挑战的味道:

    are.groups.of.equal.size <- function(x) {
        y <- rle(as.character(sort(x)))$lengths
        all(y%in%mean(y))
    }
    
    
    are.groups.of.equal.size(c(3, 3, 3))
    are.groups.of.equal.size(mtcars$cyl)
    are.groups.of.equal.size(CO2$Plant)
    are.groups.of.equal.size(mtcars$carb)
    

    【讨论】:

    • 我认为rle 是我正在寻找的缺失部分。什么是微基准挑战?
    • 看看谁能想出最快的方法来解决这个问题,因为我能想到的至少有 10 个。 sd 的建议也很有创意,我没想到。
    【解决方案3】:

    使用 sd 方法:

    are.groups.of.equal.size <- function(x) {
       x2 <- tapply(x, x, length)
       sd(x2)==0 | length(x2)==1
    }
    
    are.groups.of.equal.size(c(3, 3, 3))
    are.groups.of.equal.size(mtcars$cyl)
    are.groups.of.equal.size(CO2$Plant)
    are.groups.of.equal.size(mtcars$carb)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      相关资源
      最近更新 更多