我正在编写一些代码,需要检查给定数据输入的所有组大小是否相等。例如,假设我想知道"mpg“数据集(在ggplot2包中)是否具有:
每种驱动(四轮、前轮、每种发动机类型(4缸、6缸、8缸)的汽车的manufacturer
对于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)那样调用的单一的神话函数?或者返回这些信息的另一个基本函数(或它们的组合)?
发布于 2012-05-03 00:12:44
正如Joran所说,从这里到圣诞节,我们可以发明1000种方法来解决这个问题。我闻到了一个微基准的挑战:
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)发布于 2012-05-03 00:06:46
这里有一种方法:
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可以选择如何处理数据中的NA。
发布于 2012-05-04 19:29:32
采用可持续发展办法:
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)https://stackoverflow.com/questions/10423269
复制相似问题