R 如何检查每个组的数据观察数是否相等?

R 如何检查每个组的数据观察数是否相等?,r,R,我正在编写一些代码,需要检查给定数据输入的所有组大小是否相等。例如,假设我想知道“mpg”数据集(在ggplot2包中)是否有: 每个制造商拥有相同数量的汽车 每种驱动类型(四轮、前轮、后轮)的车辆数量相等 每种发动机类型(4缸、6缸、8缸)的车辆数量相等 对于mpg之类的数据,可以通过检查摘要输出来回答其中一些问题 library(ggplot2) # contains the mpg dataset summary(mpg$drive) # shows the breakdown o

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

  • 每个制造商拥有相同数量的汽车
  • 每种驱动类型(四轮、前轮、后轮)的车辆数量相等
  • 每种发动机类型(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)
?或者另一个将返回此类信息的基函数(或它们的组合?

这里有一种方法:

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

are.groups.of.equal.size正如乔兰所说,从这里到圣诞节,我们可以发明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)
are.groups.of.equal.size使用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)

are.groups.of.equal.size
表格
<代码>聚合
<代码>ddply
?所以有很多方法可以做到这一点。@joran-我正在尝试将其自动化,这样解决方案基本上会返回一个布尔值来判断组大小是否相等。我如何使用
table
aggregate
ddply
来实现这一点?table()返回一个向量。只需检查该向量的所有元素是否相等。sd()将是一种快速的方法。我认为
rle
是我正在寻找的缺失部分。什么是微基准挑战?看看谁能想出解决这个问题的最快方法,因为我脑子里至少能想到10个。sd的建议也很有创意,这是我没有想到的。