今回はファイルからデータテーブル (表)として読み込んで,データを処理する方法をいくつか紹介します.データ処理といっても,条件にあう列や行を抽出したりするだけです.
ここでは,具体例として,ユニオンツールのmyBeatの心拍間隔データを使います.ファイル名は"mybeat_data.csv"とします.テキストデータの中身は以下のような感じです.
メモリ仮ID,1 RRI :1000Hz 加速度 :Peak Start,2022/05/29 activity,v002 time,RRI,temperature,Acc X,Acc Y,Acc Z,HF,LF/HF,LF ratio,activity,HR 2022/05/29 19:02:39.000,521,25.1,0.00,0.00,0.00,0.000,0.000,0.000,-1.00,115 2022/05/29 19:02:39.530,1549,25.1,0.00,0.00,0.00,0.000,0.000,0.000,-1.00,39 2022/05/29 19:02:41.088,736,25.1,0.34,-1.16,0.09,0.000,0.000,0.000,0.21,82
これを,表に当てはめれば,以下のように感じになります.
メモリ仮ID | 1 | |||
RRI :1000Hz | ||||
加速度 :Peak | ||||
Start | 2022/05/29 | |||
activity | v002 | |||
time | RRI | temperature | Acc X | ... |
2022/05/29 19:02:39.000 | 521 | 25.1 | 0.00 | ... |
2022/05/29 19:02:39.530 | 1549 | 25.1 | 0.00 | ... |
2022/05/29 19:02:41.088 | 736 | 25.1 | 0.34 | ... |
最近,myBeat WHS-1とソフトがアップデートされて,ファイル中身の構成がちょっと変わりました。上は古いバージョンです。
ファイルの読み込み
myBeatのデータファイル"mybeat_data.csv"をRで読み込むときは,以下のようにします.
setwd("データファイルがあるフォルダを指定") DAT <- read.csv("mybeat_data.csv", header=TRUE, skip=5) DAT$time <- as.POSIXct(DAT$time, tz="Japan")
このスクリプトを実行すれば,全データがデータテーブル (表)としてDAT
に入ります.
このRスクリプトの2行目でファイルを読み込んでいます.skip=5
で,最初の5行,つまり
メモリ仮ID,1 RRI :1000Hz 加速度 :Peak Start,2022/05/29 activity,v002
の部分を飛ばして読み込みます.header=TRUE
とすれば,
time,RRI,temperature,Acc X,Acc Y,Acc Z,HF,LF/HF,LF ratio,activity,HR
の部分を列の名前として使います (スペースは"."に変ります).
このRスクリプトの3行目は,時間データを扱うときに必要です.私は時間データを扱うときはいつもas.POSIXct
を使います.
読み込んだデータの確認
DAT
に読み込まれたデータの内容を確認する方法を紹介します.
DAT
の最初の部分をみるときは,
head(DAT)
とします.このコマンドで,最初の6行を見ることができます.
> head(DAT) time RRI temperature Acc.X Acc.Y Acc.Z HF LF.HF LF.ratio activity HR 1 2022-05-29 19:02:39 521 25.1 0.00 0.00 0.00 0 0 0 -1.00 115 2 2022-05-29 19:02:39 1549 25.1 0.00 0.00 0.00 0 0 0 -1.00 39 3 2022-05-29 19:02:41 736 25.1 0.34 -1.16 0.09 0 0 0 0.21 82 4 2022-05-29 19:02:41 755 25.1 0.34 -1.16 0.09 0 0 0 0.21 79 5 2022-05-29 19:02:42 761 25.1 0.34 -1.16 0.09 0 0 0 0.21 79 6 2022-05-29 19:02:43 742 25.1 0.34 -1.16 0.09 0 0 0 0.21 81
head(DAT, n)
とすれば,最初のn行が出てきます.
データの最後の部分をみるときは,
tail(DAT)
とします.このコマンドで,最後の6行を見ることができます.
> tail(DAT) time RRI temperature Acc.X Acc.Y Acc.Z HF LF.HF LF.ratio activity HR 107396 2022-05-30 19:23:03 1461 30.8 -0.59 -0.91 -1.34 304703.2 2.703 72.992 0.73 41 107397 2022-05-30 19:23:05 1303 30.8 0.69 -0.81 -1.81 270349.6 2.705 73.006 1.10 46 107398 2022-05-30 19:23:06 2539 30.8 0.69 -0.81 -1.81 210960.1 2.643 72.547 1.10 24 107399 2022-05-30 19:23:09 420 30.8 2.87 -1.09 1.66 211015.2 2.589 72.137 2.49 143 107400 2022-05-30 19:23:09 505 30.8 2.87 -1.09 1.66 199525.3 2.574 72.017 2.49 119 107401 2022-05-30 19:23:09 1779 30.8 2.87 -1.09 1.66 154124.2 2.523 71.614 2.49 34
tail(DAT, n)
とすれば,最後のn行が出てきます.
データの行数を確認するときは,
nrow(DAT)
とします.
各列の名前を抽出したいときは,
colnames(DAT)
とします.
列 (変数)を抽出
DAT
に含まれる特定の列を取り出す方法をいくつか紹介します.
2列目の"RRI"を抽出する場合,
DAT$RRI
とするか,
DAT[, "RRI"]
とするか,
DAT[, 2]
とします.結果はどれも同じです.
条件に合う行を抽出
特定の条件を満たす行だけを抽出したいことがあります.そのための方法を紹介します.
DAT
に含まれるRRI
の値が400以上,1200未満のデータだけを取り出したいときは,
SEL <- DAT[DAT$RRI >= 400 & DAT$RRI <= 1200,]
とすれば,SEL
に条件に合うデータが入ります.条件は,「かつ」が"&"で,「または」が"|"です.if文で使う"&&"や"||"と違うので注意してください.
DAT
の特定の日時の区間[t1, t2]を取り出したいときは,
t1 <- as.POSIXct("2022-05-30 08:00:00", tz="Japan") t2 <- as.POSIXct("2022-05-30 17:00:00", tz="Japan") SEL <- DAT[DAT$time >= t1 & DAT$time <= t2,]
とすれば,SEL
に条件に合うデータが入ります.
Rでは,if文で一つ一つ条件を判定すると,計算時間が異常にかかるので,ここで紹介した方法をできるだけ使うようにしてください.
行を指定して抽出,削除
DAT
の行番号を指定してデータを抽出する方法を紹介します.
DAT
のn行目からm行目までを抽出するときは,
SEL <- DAT[n:m,]
とします.
反対に,DAT
のn行目からm行目までを除くときは,
SEL <- DAT[-(n:m),]
とします.マイナスを付ければ,「除く」という意味になります.(n:m)
のように,括弧を付けるのを忘れないでください.
DAT
から飛び飛びの行,n1, n2, n3を取り出すときは,
SEL <- DAT[c(n1, n2, n3),]
とします.c(...)
を付けるのを忘れないでください.
n1, n2, n3を除くときは,
SEL <- DAT[-c(n1, n2, n3),]
とします.ここでもc(...)
を付けるのを忘れないでください.