2

特定のデータ入力のすべてのグループサイズが等しいかどうかを確認する必要があるコードを書いています。たとえば、「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)か? または、そのような情報を返す別の基本関数 (またはそれらの構成)?

4

3 に答える 3

4

これを行う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必要に応じて、データ内の s を処理する方法のオプションがあることに注意してNAください。

于 2012-05-03T00:06:46.780 に答える
2

Joranが言ったように、これを行う方法について、ここからクリスマスまで何百もの方法を発明することができます。私はマイクロベンチマークチャレンジの匂いがします:

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-03T00:12:44.393 に答える
0

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)
于 2012-05-04T19:29:32.603 に答える