0

私は40人の個人を含み、それぞれが10ビネットを評価している研究を分析しています。

indiv     vign      score    score2    gender    
  1         1         5         3        1
  1         2         2         4        1   
  1         3         8         1        1
  .         .         .         .        .
  .         .         .         .        .
  .         .         .         .        .
  39       10         9         1        1 
  40        8         1         5        0 
  40        9         3         8        0 

ブートストラップを取りたかったのですが、ビネットをサンプリングするのは意味がないことにすぐに気付きました。代わりに人をサンプリングする必要があります(したがって、1人あたり約10行をサンプリングします)。

次の関数は機能しますが、次の関数のボトルネックのようなものです。問題は、どうすればこれをより効率的に行うことができるかということです。

ResampleMultilevel <- function(data, groupvar) {
  n <- length(unique(data[,groupvar]))

  index <- sample(data[ , groupvar], n, replace = TRUE)

  resampled <- NULL      # one of the issues is that we do not know 
                         # the size of the matrix yet, since it may vary. 
  for (i in 1:n) {
   resampled <- rbind(resampled, data[data[, groupvar] == index[i], ])
  }
  return(resampled)
}

サブセットの問題は、重複を保持する方法が見つからなかったことです。

a <- cbind(rep(1:40, each = 10), rep(1:10, 4), rnorm(40), rnorm(40)), rep(1:10, 4), rnorm(40), rnorm(40))

index <- c(1,1)

subset(a, a[,1] == index)
4

2 に答える 2

0

a <- インデックス <- 5:10

これは、構造が実際に私が望むマトリックスではないことを除いて、ほとんど機能します。

lapply(index, function(x) a[which(a[,1] == x),])

また、これを行うための非ループの方法があれば、これはほとんどそこに到達します。これは、ここでは番号 2 でのみ機能するためです。

a[which(a[,1] == 2),]       # works
a[which(a[,1] == index), ]  # does not work
于 2013-03-12T06:52:19.273 に答える