ただの備忘録です。
ロングデータとワイドデータの変換は結構頻発するにもかかわらず、なぜかpivot_widerとpivot_longerの引数を毎回忘れてまう。
毎回ググっているが、みんなちゃんと書いてくれていてぱっと見、よくわからないので、最低限だとどうなるかここに残しとく。
とりあえずこんなデータがある。
df <- tibble(ID = rep(1:3, 2),
questionaire = c(rep("Q1",2), rep("Q2",2)),
ans = runif(4, 1, 5) %>% round(0))
> df
# A tibble: 4 × 3
ID questionaire ans
<int> <chr> <dbl>
1 1 Q1 1
2 2 Q1 2
3 1 Q2 3
4 2 Q2 3
- これはいわゆるロングデータだけれども、ワイドデータにしたくなることがある。
ワイドデータにする
- questionaire列を作って、その中の値をansにするには以下
wide <- df %>%
tidyr::pivot_wider(names_from = questionaire,
values_from = ans)
> wide
# A tibble: 2 × 3
ID Q1 Q2
<int> <dbl> <dbl>
1 1 1 3
2 2 2 3
- 列名にしたい列を
names_from
で指定し、どの値を入れるかをvalues_from
で指定するだけ。
ロングデータにする
long1 <- wide %>%
pivot_longer(cols=c(Q1,Q2))
> long1
# A tibble: 4 × 3
ID name value
<int> <chr> <dbl>
1 1 Q1 1
2 1 Q2 3
3 2 Q1 2
4 2 Q2 3
- ロングデータにする際はロングデータにしたい列を指定するだけで良い。
- ただし、列名がデフォルトで
name
とvalue
になっている。-
names_to
とvalues_to
で指定しれやれば良い
-
long2 <- wide %>%
pivot_longer(cols=c(Q1,Q2),names_to = "question",
values_to = "ans")
> long2
# A tibble: 4 × 3
ID question ans
<int> <chr> <dbl>
1 1 Q1 1
2 1 Q2 3
3 2 Q1 2
4 2 Q2 3
終わり。