-3

各試行内の固視をカウントする必要がある目のデータ ファイルを分析したいと考えています。これは私のデータのサンプルで、3 列目と 4 列目は x と y の位置で、8 列目は凝視です。

75      1 76498  797 637     0   3.313    3.320   1    0
76      1 76499  793 636     0   3.320    3.321   1    0
77      1 76500  788 637     0   3.292    3.308   1    0
78      1 76501  785 636     0   3.274    3.273   1    0
79      1 76502  781 636     0   3.257    3.265   1    0
80      1 76503  775 637     0   3.257    3.250   1    0
81      1 76504  760 641     0   3.247    3.236   0    0
82      1 76505  746 644     0   3.228    3.258   0    

固定が停止するまで (たとえば、82 行目の 0 で示される) すべての固定 (一連の固定で示される) を検索し、次の固定 (列 8 の次の 1) に進む関数を作成しようとしています。すべての試行 (2 番目の列) について、たとえば 4 つの固定が必要であり、それぞれが平均 (x) と平均 (y) と長さ (nrow によって決定される) を出力します。

while ループや for ループの簡単な使い方がわからないので、どなたかご存知でしたら教えていただければ幸いです。ではごきげんよう、

ティム

4

1 に答える 1

0

ここで興味深いのは、Rのベクトル化手法を使ってそれをどのように解決するかということだと思います。これは、かなり単純で退屈なループベースの(ベクトル化されていない)ソリューションです。

# get a list of the start and enpoints of all fixations
fixations <- vector(mode = "list")
inFixation <- FALSE
for (row in seq(nrow(df)) {
  # if we have no active fixation and we see a 1, add new fixation
  if (!isTRUE(inFixation) && df[row, 8] == 1) {
    fixations[[length(fixations) + 1]] <- c("start" = row, "end" = NA)
    inFixation <- TRUE
  }

  # if we have an active fixation and we see a 0, update end of current fixation
  if (isTRUE(inFixation) && (df[row, 8] == 0 || row == nrow(df))) {
    fixations[[length(fixations)]]["end"] <- row - 1
    inFixation <- FALSE
  }
}

# then you can get the mean x, y coordinates via
lapply(fixations, function(fixation) {
  c(
    "mean.x" = mean(df[seq(from = fixation["start"], to = fixation["end"], by = 1), 3],
    "mean.y" = mean(df[seq(from = fixation["start"], to = fixation["end"], by = 1), 4]
  )
})
于 2013-03-01T10:24:23.750 に答える