1

私は 24 人の参加者の瞳孔測定データを持っており、それぞれが数千行の瞳孔サイズの測定値を持っています (私が名前を付けたようにPupilAvg)。時間列が呼び出さTrialTimestampれ、ミリ秒単位で測定されます。私も列としてtrial.numberandを持ってtrial.typeいます。私のデータフレーム()の頭はmydata1以下に見ることができます。

RecordingName trial.number trial.type TrialTimestamp PupilAvg
1    Mix_20_S04            1       same              0    3.910
2    Mix_20_S04            1       same             17    3.815
3    Mix_20_S04            1       same            133    3.545
4    Mix_20_S04            1       same            150    3.460
5    Mix_20_S04            1       same            167    3.410
6    Mix_20_S04            1       same            183    3.345

私の質問は、参加者ごとの試行ごとの平均ベースラインを取得するにはどうすればよいですか?ここで、ベースラインは 5400ms から 5500ms の間の平均瞳孔サイズに等しくなります。これらのベースライン測定値を分析ウィンドウ内の瞳孔測定値から差し引くことができるようにしたいと考えています (個人差を補正するため)。

1 人の参加者 (04) に対して 1 つのトライアル (トライアル 3) でこれを行うコードを考え出しました。

S04data<-filter(mydata1, RecordingName == "Mix_20_S04")
S04data1<-filter(S04data, trial.number == "3")
baselineS04 <- with(S04data1, mean(PupilAvg[TrialTimestamp >= 5400 & TrialTimestamp <= 5500]))

これは 3.1225 の値を返します。したがって、参加者 4、試行 3 のベースライン値は 3.1225 です。

各トライアルで各参加者のベースライン測定値を取得するためのコードを誰かが書くのを手伝ってくれたら、とてもありがたいです (各トライアルで各参加者の個々のコードを書く必要はありません!!)。

4

2 に答える 2

1

aggregateデータ サブセットを使用して、TrialTimestamp 範囲内の観測のみを含めることができると思います。ここでは 130 と 150 を使用します (投稿されたデータを使用できるようにするため) が、これらを 5400 と 5500ms に変更できます。

# your data
mydata1 <- read.table(text="RecordingName trial.number trial.type TrialTimestamp PupilAvg
1    Mix_20_S04            1       same              0    3.910
2    Mix_20_S04            1       same             17    3.815
3    Mix_20_S04            1       same            133    3.545
4    Mix_20_S04            1       same            150    3.460
5    Mix_20_S04            1       same            167    3.410
6    Mix_20_S04            1       same            183    3.345", header=TRUE)


# Find mean: subset the data so that only values within 
# required TrialTimestamp range
aggregate(PupilAvg ~ RecordingName + trial.number ,
     data=mydata1[(mydata1$TrialTimestamp > 130 & mydata1$TrialTimestamp < 155),], 
                                                               mean)

編集

マイケルがコメントで述べたようにaggregatesubset議論があるので、これは目に見えやすいかもしれません

aggregate(PupilAvg ~ RecordingName + trial.number, data=mydata1, mean, 
                         subset = TrialTimestamp > 130 & TrialTimestamp < 155)
于 2014-10-22T19:59:04.067 に答える