tidyrで連番データにデータクリーニング

投稿者: Anonymous

Rのtidyrでデータクリーニングをしたいと考えています。

データはラベルが付いていないものを読み込んだのでV1~V1998となっており、型はデータフレームで名前はdfです。

v1,v2,v3,...,v1998
1,13,23,...,32
2,14,26,...,32
4,14,27,...,38
5,...
...
354,243,543,...,657

のようにv1に時間がはいり、V2~はそれぞれの人のデータとなっております。
これを

time,data
1,13
2,14
4,14
....
354,243
1,23
2,26
....

のように縦に並べたいと考えています。timeにV1の値が入り、dataにV2~の値が入る形です。

df %>% tidyr::gather(key =time,value = data,df[,2:1998])

などとやってもエラーが出てしまいます。
どう対処すればよいでしょうか?
よろしくお願いします。

追記
tidyrでないパッケージ利用でも構いません。(スピードが実用に耐えられればですが…)

解決

以下を試してみてください:

library(dplyr)
library(tidyr)

df <- data.frame(
  v1 = 1:5,
  v2 = sample(11:20, 5),
  v3 = sample(21:30, 5),
  v4 = sample(31:40, 5)
)

df %>% 
  gather(key = person, value = data, -v1)

gather()はwide型データをlong型データに置き換える関数です。keyには「その値(value)がwide型のときどの変数にあったものなのか」を示し,valueはその値を示します。そして残りの引数(…と表現されるもの)には,「valueに流し込む値がある変数」を指定します。

今回の場合,v1が時間で,縦に持っていくのはv2以降の変数ということから,-v1として縦に持っていく変数から除外しています。これにより,v1は残ることとなります。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *