1

次のようなデータ フレームがあるとします。

dat <- data.frame(
    a = rnorm(1000),
    b = 1/(rnorm(1000))^2,
    c = 1/rnorm(1000),
    d = as.factor(sample(c(0, 1, 2), 1000, replace=TRUE)),
    e = as.factor(sample(c('X', 'Y'), 1000, replace=TRUE))
)

このデータのすべての次元 (つまり、a、b、c、d、e) のヒストグラムを、各次元で指定されたブレークで計算したいと考えています。明らかに、因子次元は、それらのブレークが既に含まれていることを意味します。最終的なデータは、各行がすべての次元 (ブレークの組み合わせ) にわたるブレークのベクトルであり、この組み合わせのデータ発生回数である data.frame のようにする必要があります。Python numpy には histogramdd: Multidimension histogram in python があります。Rに似たようなものはありますか?Rでこれを行う最良の方法は何ですか? ありがとうございました。

私は最終的に次のようにしました。ここでは、ビンのカウントが最後の行として関数に渡されます。

dat <- data.frame(
    a = rnorm(1000),
    b = 1/(rnorm(1000))^2,
    c = 1/rnorm(1000),
    d = as.factor(sample(c(0, 1, 2), 1000, replace=TRUE)),
    e = as.factor(sample(c('X', 'Y'), 1000, replace=TRUE))
)

dat[nrow(dat)+1,] <- c(10,10,10,NaN,NaN)

histnd <- function(df) {
  res <- lapply(df, function(x) {
    bin_idx <- length(x)
    if (is.factor(x) || is.character(x)) {
      return(x[-bin_idx])
    }
    #
    x_min <- min(x[-bin_idx])
    x_max <- max(x[-bin_idx])
    breaks <- seq(x_min, x_max, (x_max - x_min)/x[bin_idx])
    cut(x[-bin_idx], breaks)
    })
  res <- do.call(data.frame, res)
  res$FR <- as.numeric(0)
  res <- aggregate(FR ~ ., res, length)
}

h <- histnd(dat)
4

1 に答える 1