Rでコマンド:データ変形のコマンド例

Rの解析に役に立つ記事
スポンサーリンク

同じ変数と測定タイミングが異なるデータを1行にまとめるコマンドの紹介です。「tidyr」パッケージを利用すると簡単です。

この紹介は「Rで解析:CSVファイルをまとめて読み込み「readbulk」パッケージ」をご覧になられた方からの質問です。非常にわかりやすい質問で、多くの方の役に立ちそうなので記事にしました。ご質問ありがとうございました。

なお、「readbulk」パッケージはフォルダ内の全CSVを読み込む便利なパッケージです。ただし、1ファイル毎にデータが読み込まれるためファイル数分のNA列が発生します。そんな問題を解決するコマンドの紹介です。

・Rで解析:CSVファイルをまとめて読み込み「readbulk」パッケージ
 https://www.karada-good.net/analyticsr/r-338/

<処理データの例>

extidyr

実行コマンドはwindows 7およびOS X 10.11.2のR version 3.2.3で確認しています。

スポンサーリンク

実行コマンド

詳細はコメント、各パッケージのヘルプを確認してください。なお、実行コマンドではcsvファイルを読み込み処理した例です。

#CSVファイルを読み込む:read.csvコマンド
library("tcltk")
#日本語を含む場合はfileEncoding="CP932"を追加
#NAの文字列を"NA"値に指定
selectACsv <- paste(as.character(tkgetOpenFile(title = "csv&#12501;&#12449;&#12452;&#12523;&#12434;&#36984;&#25246;",filetypes = '{"csv&#12501;&#12449;&#12452;&#12523;" {".csv"}}',initialfile = "*.csv")), sep = "", collapse =" ")
ReadData <- read.csv(selectACsv, header = TRUE, sep = ",", na.strings = "NA", stringsAsFactors = FALSE, fileEncoding = "CP932")
########

#&#12487;&#12540;&#12479;&#30906;&#35469;
ReadData
ban term         T_1         T_2         T_3         T_4         T_5
1   1    A 0.099999999          NA          NA          NA          NA
2 261    A          NA 0.000999999          NA          NA          NA
3 452    A          NA          NA 0.000999999          NA          NA
4 676    A          NA          NA          NA 0.000999999          NA
5 875    A          NA          NA          NA          NA 0.000999999

###&#12487;&#12540;&#12479;&#12434;&#25972;&#24418;#####
#tidyr&#12497;&#12483;&#12465;&#12540;&#12472;&#12434;&#21033;&#29992;
library("tidyr")
#&#12497;&#12452;&#12503;&#12300;%>%&#12301;&#12372;&#12392;&#12398;&#20966;&#29702;&#20869;&#23481;
#ban&#12487;&#12540;&#12479;&#12434;&#21066;&#38500;
#&#12300;gather&#12301;&#12467;&#12510;&#12531;&#12489;&#12391;term&#12434;&#22522;&#28310;&#12395;&#12487;&#12540;&#12479;&#12434;&#32294;&#12395;&#20006;&#12409;&#12427;
#&#12300;spread&#12301;&#12467;&#12510;&#12531;&#12489;&#12391;ket&#12395;&#27178;&#26041;&#21521;&#12395;&#20006;&#12409;&#12427;&#22793;&#25968;&#12487;&#12540;&#12479;&#21015;&#12434;&#25351;&#23450;,value&#12395;&#20516;&#21015;&#12434;&#25351;&#23450;
ResultData <- ReadData[, -1] %>%
  gather(key = time, value = Value, -term, na.rm = TRUE) %>%
  spread(key = time, value = Value)
#&#30906;&#35469;
ResultData
term        T_1         T_2         T_3         T_4         T_5
1    A 0.09999999  0.09999999  0.09999999  0.09999999  0.09999999

少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました