[解決済み] 複数の列のセットを集める
2022-10-09 17:43:49
質問
回答者が 1~3 回の質問を繰り返すオンラインアンケートのデータがあります。アンケートソフトウェア (Qualtrics) はこのデータを複数の列に記録します。つまり、アンケートの Q3.2 には列
Q3.2.1.
,
Q3.2.2.
そして
Q3.2.3.
:
df <- data.frame(
id = 1:10,
time = as.Date('2009-01-01') + 0:9,
Q3.2.1. = rnorm(10, 0, 1),
Q3.2.2. = rnorm(10, 0, 1),
Q3.2.3. = rnorm(10, 0, 1),
Q3.3.1. = rnorm(10, 0, 1),
Q3.3.2. = rnorm(10, 0, 1),
Q3.3.3. = rnorm(10, 0, 1)
)
# Sample data
id time Q3.2.1. Q3.2.2. Q3.2.3. Q3.3.1. Q3.3.2. Q3.3.3.
1 1 2009-01-01 -0.2059165 -0.29177677 -0.7107192 1.52718069 -0.4484351 -1.21550600
2 2 2009-01-02 -0.1981136 -1.19813815 1.1750200 -0.40380049 -1.8376094 1.03588482
3 3 2009-01-03 0.3514795 -0.27425539 1.1171712 -1.02641801 -2.0646661 -0.35353058
...
私はすべてのQN.N*列を整頓された個々のQN.N列に結合し、最終的にこのようなものに仕上げたいと考えています。
id time loop_number Q3.2 Q3.3
1 1 2009-01-01 1 -0.20591649 1.52718069
2 2 2009-01-02 1 -0.19811357 -0.40380049
3 3 2009-01-03 1 0.35147949 -1.02641801
...
11 1 2009-01-01 2 -0.29177677 -0.4484351
12 2 2009-01-02 2 -1.19813815 -1.8376094
13 3 2009-01-03 2 -0.27425539 -2.0646661
...
21 1 2009-01-01 3 -0.71071921 -1.21550600
22 2 2009-01-02 3 1.17501999 1.03588482
23 3 2009-01-03 3 1.11717121 -0.35353058
...
は
tidyr
ライブラリは
gather()
という関数があり、この関数は
1
のカラムのセットを組み合わせるのに最適です。
library(dplyr)
library(tidyr)
library(stringr)
df %>% gather(loop_number, Q3.2, starts_with("Q3.2")) %>%
mutate(loop_number = str_sub(loop_number,-2,-2)) %>%
select(id, time, loop_number, Q3.2)
id time loop_number Q3.2
1 1 2009-01-01 1 -0.20591649
2 2 2009-01-02 1 -0.19811357
3 3 2009-01-03 1 0.35147949
...
29 9 2009-01-09 3 -0.58581232
30 10 2009-01-10 3 -2.33393981
結果のデータフレームは予想通り30行になります(10個体、それぞれ3ループ)。しかし、2つ目の列のセットを収集することは正しく動作しません。
Q3.2
と
Q3.3
というように、30行ではなく90行になってしまいます(10個の個体、Q3.2の3ループ、Q3.3の3ループの全組み合わせ、実際のデータでは列のグループごとに組み合わせが大幅に増えます)。
df %>% gather(loop_number, Q3.2, starts_with("Q3.2")) %>%
gather(loop_number, Q3.3, starts_with("Q3.3")) %>%
mutate(loop_number = str_sub(loop_number,-2,-2))
id time loop_number Q3.2 Q3.3
1 1 2009-01-01 1 -0.20591649 1.52718069
2 2 2009-01-02 1 -0.19811357 -0.40380049
3 3 2009-01-03 1 0.35147949 -1.02641801
...
89 9 2009-01-09 3 -0.58581232 -0.13187024
90 10 2009-01-10 3 -2.33393981 -0.48502131
への複数の呼び出しを使用する方法はありますか?
gather()
を複数回呼び出して、正しい行数を維持しながら、このように列の小さなサブセットを結合する方法はありますか?
どのように解決するのですか?
この方法はとても自然なことだと思います。
df %>%
gather(key, value, -id, -time) %>%
extract(key, c("question", "loop_number"), "(Q.\\..)\\.(.)") %>%
spread(question, value)
まず、すべての質問カラムを収集し
extract()
に分離して
question
と
loop_number
であれば
spread()
の質問をカラムに戻す。
#> id time loop_number Q3.2 Q3.3
#> 1 1 2009-01-01 1 0.142259203 -0.35842736
#> 2 1 2009-01-01 2 0.061034802 0.79354061
#> 3 1 2009-01-01 3 -0.525686204 -0.67456611
#> 4 2 2009-01-02 1 -1.044461185 -1.19662936
#> 5 2 2009-01-02 2 0.393808163 0.42384717
関連
-
Rでエラー:単項演算子への引数が無効
-
R言語 - マトリックス
-
[解決済み] R:自然対数を使った方程式をnlsで使う
-
[解決済み] データフレームの行を複数の列でソート(並び替え)する。
-
[解決済み] データフレーム列の名前によるドロップ
-
[解決済み] リストやデータフレームの要素にアクセスするためのブラケット[ ]とダブルブラケット[[ ]]の違いについて
-
[解決済み] data.frameの1つの列の名前を変更する方法は?
-
[解決済み] データフレーム内の列を名前でドロップする方法
-
[解決済み】R関数でオプション引数を指定する "正しい "方法
-
[解決済み】私のggplot2構文が賢明であるときに、R CMDチェック「no visible binding for global variable」注記を処理するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
R 描画エラー plot.new() : 図形の余白が大きすぎる
-
R LanguageError in hist.default() : 'x' は数値でなければなりません.
-
Rによる系統的クラスタリング(階層)分析のグラフ形式の完全版
-
[解決済み] ネストされた plot_grid を同じサイズに拡大縮小するには?
-
[解決済み] 非常に大きなテーブルをデータフレームとして高速に読み込む
-
[解決済み] Rでtrycatchの書き方
-
[解決済み] データフレーム内のランダムな行をサンプリングする
-
[解決済み】RでCRANミラーを選択する方法
-
[解決済み】安定したマッピングを持つggplot2のカテゴリ変数に色を割り当てるには?
-
[解決済み] [Solved] data.frameのカラムをベクトルに変換する?