忍者ブログ
おかげさまでspamコメントが増えてきましたので、一応コメントを承認制にしました。基本的には承認します。
[261] [260] [259] [258] [257] [256] [255] [254] [253] [251] [250]

知りたいこと。複数の列に、継時的データが存在する。(たとえば、列Aには、ある実験参加者に、ある刺激を出したときのある反応を数値化したものが、1秒毎にn秒まで記録されており、列Bには、Aとは異なる実験参加者の同様のデータが記録されており…というような/"ある”が多いな)。ここで、列A-Dが実験参加者の反応データであるとすると、列Eには、その時間データ(たとえば1秒置きの)が記録されている。これは被験者間で共通である。このとき、それぞれの実験参加者のある区間(ここではa秒からb秒)での反応のうち、もっとも大きいものともっとも小さいもの、およびその反応が起こった時間を知りたいとする。このとき、どういう記述をしたら最も効率が良いか?

やったこと。列Fに、=min(Aa:Ab)、=max(Aa:Ab)として、まずは区間の最小、最大値を求める。これはまあ、良いでしょう。そんで、それをGHIにそれぞれコピーすれば、ABCDに対応する最大、最小値データがFGHIにそれぞれできる(以下この操作を省略する)。問題は、そのセルがどこにあるか(何秒の時点で起こったか)ということで、10秒くらいだったら目視でOKなんだけど、200秒とかになると目視で探すのは非効率的なわけで、次の手を打つ必要があるわけです。

それで、次のようにしてみました。まず、列Jに、=if(A1=F$1,$E1,FALSE)という数式を記述し、JKLM列全体にコピーしました。これで何をしているかというと、もし、Aの任意の行がF1(最大値)と一致していれば($1は絶対参照で、行を変えてコピーしても数値が変化しないようにした)、Eのそれに対応する行を記述し($Eは、列を変えてコピーしてもアルファベットが変化しないようにするため)、それ以外は全部FALSE(じゃなくても文字列ならなんでもいーんだけど)という文字列を返すようにした、ということですね。それで、N列に、=if(A1=F$2,$E1,FALSE)という数式を入れて、これをNOPQ列全体にコピー。これで、JKLM列には最大値データに、NOPQ列には最小値データに一致するセルに、そのセルに対応する時間データの数値が入っているはずなので、列R1行目に=max(J1:Jn)、列R2行目に=max(N1:Nn)、列R3行目に=sum(J1:Jn)、列R4行目に=sum(K1,Kn)と記述して、それを列STUにコピーしたわけです。そうすると、最大値、最小値に一致するデータしか数字(時間データ)が載ってないわけですから、自動的に列RSTUに、列ABCDの最大、最小値が出てくるわけですね。sumの数式は、もし万が一同じ値が二つあった場合、自動的に加算されて出てくるわけで、最大/最小値の2倍(以上)になってたら修正が必要なわけです。幸い、そういうことはなかったのですが、これは若干特殊なデータ(同じ実験参加者が全く同じ反応をすることはありえない)であるからOKだったわけで、そうでないときはダメ、ということで、既にかなり特殊だったわけですが、ともあれ。

で、このやり方だと、ごらんのとおり、ABCD+Eにある基本データの最大最小値およびその出現時刻を見るために、FGHIJKLMNOPQRSTU列を使っているわけで、すげーみにくいんですよね。もっとあっさりできる方法はないんでしょうか。ということで、どなたかご存知でしたら、教えてください。この本がいいよ!とか

ヤフー知恵袋とかで聞いてみようかと思ったんですが、今回は解決してしまったので、わざわざ聞くほどでもねーな、みたいな。ここだと解決可能性が相当低いことはわかってるんですが、一縷の望みを託して。ということで、ここを見てくださってる方、もし気が向いたらよろしくお願いします。

拍手[0回]

PR

コメント


コメントフォーム
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字


トラックバック
この記事にトラックバックする:


忍者ブログ [PR]
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
メールはこちらから
プロフィール
HN:
渡辺隼人
性別:
男性
ブログ内検索
カウンター
コガネモチ