実験・調査は,様々なフェイズやブロックから構成される場合も多いでしょう。例えば,再認記憶課題であれば,学習段階,テスト段階に分かれます。ここでは,それらのブロックのみを抽出する方法をRで実施する方法を紹介します。フェイズやブロックがSequenceまたはLoopで構成されていることを前提とします。以下のような構造です。

この時に,学習段階のみのデータを取り出したいと考えます。lab.jsのデータでは「sender」という列に各コンポーネントの名前が出力されます。ですので,1つの方法はこのコンポーネント名を手がかりにする方法です。しかし,注視点などの汎用性のあるコンポーネントは同じ名前にしているため,うまく行かない場合も多いでしょう。そこで利用できるのが「sender_id」です。sender_idは「0_0_1」などの数字であるため,一見すると何を意味しているのかがわかりにくいのですが,これは,lab.jsの階層構造を示した数字です。Sequence,Loopごとに数字の階層が増えていきます。例えば,学習段階であれば「0_0_1」,学習段階の試行の注視点であれば「0_0_1_0_0」という出力です。先ほどの階層構造に対応させて記載すると以下のようになります(階層構造は正しいのですが,数字自体は仮のものです)。

このように,sender_idは,階層の深さをアンダーバーの数で示しており,コンポーネントの順番を数字の大きさで示しているわけです。したがって,任意のブロックを取り出したい場合には,そのブロックに対応した階層から始まる文字列が含まれる行だけを抽出しましょう。例えば,学習段階であればsender_idが「0_0_1」から始まる行のみを取り出せばよいですね。Rで以下のようなコードを利用できます。dataには任意のデータを入れて下さい。

#ライブラリ読み込み
#入れてない場合は以下のコメントを外してください
#install.packages("stringi")
#install.packages("tidyverse")
library(stringi)
library(tidyverse)

data <- read_csv("data.csv")
filteredData <- data %>%
	filter(str_starts(sender_id, "0_0_3"))

ここでは,文字列処理用パッケージであるstringiを利用し,そこに含まれるstr_starts(列名, 値)によって,列名に前方一致検索をかけています。sender_idのブロックに対応する階層以下の文字列を値として指定することで,そのブロックに含まれるすべてのコンポーネントを抽出することができます。

©2020 Masanori Kobayashi