Convert from TALL dataset to WIDE
library(readr)
long1 <- read_csv("long1.csv")
## Rows: 22 Columns: 4
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## dbl (4): id, time, bmi, satis
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
long1
1 |
1 |
28.0 |
6 |
1 |
2 |
27.6 |
7 |
1 |
3 |
27.4 |
8 |
2 |
1 |
33.4 |
7 |
2 |
2 |
33.5 |
7 |
2 |
3 |
33.2 |
6 |
3 |
1 |
23.4 |
8 |
3 |
2 |
23.3 |
9 |
3 |
3 |
24.5 |
8 |
4 |
1 |
25.6 |
6 |
4 |
3 |
26.6 |
8 |
5 |
1 |
29.0 |
5 |
6 |
1 |
30.0 |
7 |
6 |
2 |
31.2 |
7 |
6 |
3 |
30.5 |
8 |
7 |
1 |
33.2 |
7 |
8 |
1 |
34.4 |
8 |
9 |
1 |
26.6 |
7 |
9 |
2 |
26.4 |
8 |
10 |
1 |
25.5 |
8 |
10 |
2 |
25.7 |
7 |
10 |
3 |
24.9 |
9 |
library(tidyr)
long1_to_wide <- long1 %>%
tidyr::pivot_wider(id_cols = id,
names_from = time,
values_from = c(bmi, satis))
long1_to_wide
1 |
28.0 |
27.6 |
27.4 |
6 |
7 |
8 |
2 |
33.4 |
33.5 |
33.2 |
7 |
7 |
6 |
3 |
23.4 |
23.3 |
24.5 |
8 |
9 |
8 |
4 |
25.6 |
NA |
26.6 |
6 |
NA |
8 |
5 |
29.0 |
NA |
NA |
5 |
NA |
NA |
6 |
30.0 |
31.2 |
30.5 |
7 |
7 |
8 |
7 |
33.2 |
NA |
NA |
7 |
NA |
NA |
8 |
34.4 |
NA |
NA |
8 |
NA |
NA |
9 |
26.6 |
26.4 |
NA |
7 |
8 |
NA |
10 |
25.5 |
25.7 |
24.9 |
8 |
7 |
9 |
Go from WIDE to LONG
wide1 <- read_csv("wide1.csv")
## Rows: 10 Columns: 7
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## dbl (7): id, bmi1, bmi2, bmi3, satis1, satis2, satis3
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
wide1
1 |
28.0 |
27.6 |
27.4 |
6 |
7 |
8 |
2 |
33.4 |
33.5 |
33.2 |
7 |
7 |
6 |
3 |
23.4 |
23.3 |
24.5 |
8 |
9 |
8 |
4 |
25.6 |
NA |
26.6 |
6 |
NA |
8 |
5 |
29.0 |
NA |
NA |
5 |
NA |
NA |
6 |
30.0 |
31.2 |
30.5 |
7 |
7 |
8 |
7 |
33.2 |
NA |
NA |
7 |
NA |
NA |
8 |
34.4 |
NA |
NA |
8 |
NA |
NA |
9 |
26.6 |
26.4 |
NA |
7 |
8 |
NA |
10 |
25.5 |
25.7 |
24.9 |
8 |
7 |
9 |
wide1_to_long1 <- wide1 %>%
tidyr::pivot_longer(cols = bmi1:satis3)
wide1_to_long1
1 |
bmi1 |
28.0 |
1 |
bmi2 |
27.6 |
1 |
bmi3 |
27.4 |
1 |
satis1 |
6.0 |
1 |
satis2 |
7.0 |
1 |
satis3 |
8.0 |
2 |
bmi1 |
33.4 |
2 |
bmi2 |
33.5 |
2 |
bmi3 |
33.2 |
2 |
satis1 |
7.0 |
2 |
satis2 |
7.0 |
2 |
satis3 |
6.0 |
3 |
bmi1 |
23.4 |
3 |
bmi2 |
23.3 |
3 |
bmi3 |
24.5 |
3 |
satis1 |
8.0 |
3 |
satis2 |
9.0 |
3 |
satis3 |
8.0 |
4 |
bmi1 |
25.6 |
4 |
bmi2 |
NA |
4 |
bmi3 |
26.6 |
4 |
satis1 |
6.0 |
4 |
satis2 |
NA |
4 |
satis3 |
8.0 |
5 |
bmi1 |
29.0 |
5 |
bmi2 |
NA |
5 |
bmi3 |
NA |
5 |
satis1 |
5.0 |
5 |
satis2 |
NA |
5 |
satis3 |
NA |
6 |
bmi1 |
30.0 |
6 |
bmi2 |
31.2 |
6 |
bmi3 |
30.5 |
6 |
satis1 |
7.0 |
6 |
satis2 |
7.0 |
6 |
satis3 |
8.0 |
7 |
bmi1 |
33.2 |
7 |
bmi2 |
NA |
7 |
bmi3 |
NA |
7 |
satis1 |
7.0 |
7 |
satis2 |
NA |
7 |
satis3 |
NA |
8 |
bmi1 |
34.4 |
8 |
bmi2 |
NA |
8 |
bmi3 |
NA |
8 |
satis1 |
8.0 |
8 |
satis2 |
NA |
8 |
satis3 |
NA |
9 |
bmi1 |
26.6 |
9 |
bmi2 |
26.4 |
9 |
bmi3 |
NA |
9 |
satis1 |
7.0 |
9 |
satis2 |
8.0 |
9 |
satis3 |
NA |
10 |
bmi1 |
25.5 |
10 |
bmi2 |
25.7 |
10 |
bmi3 |
24.9 |
10 |
satis1 |
8.0 |
10 |
satis2 |
7.0 |
10 |
satis3 |
9.0 |
This code uses “regular expressions” to parse the “patterns” of variable names.
This is my guess of why/how this works…
()
identifies a grouping
.
identifies any characters except new line
+
identifies a quantifier (number)
Learn more with these cheatsheets on “regex”:
Also see:
wide1_to_long2 <- wide1 %>%
tidyr::pivot_longer(cols = bmi1:satis3,
names_to = c(".value", "time"),
names_pattern = "(.+)(.+)")
wide1_to_long2
1 |
1 |
28.0 |
6 |
1 |
2 |
27.6 |
7 |
1 |
3 |
27.4 |
8 |
2 |
1 |
33.4 |
7 |
2 |
2 |
33.5 |
7 |
2 |
3 |
33.2 |
6 |
3 |
1 |
23.4 |
8 |
3 |
2 |
23.3 |
9 |
3 |
3 |
24.5 |
8 |
4 |
1 |
25.6 |
6 |
4 |
2 |
NA |
NA |
4 |
3 |
26.6 |
8 |
5 |
1 |
29.0 |
5 |
5 |
2 |
NA |
NA |
5 |
3 |
NA |
NA |
6 |
1 |
30.0 |
7 |
6 |
2 |
31.2 |
7 |
6 |
3 |
30.5 |
8 |
7 |
1 |
33.2 |
7 |
7 |
2 |
NA |
NA |
7 |
3 |
NA |
NA |
8 |
1 |
34.4 |
8 |
8 |
2 |
NA |
NA |
8 |
3 |
NA |
NA |
9 |
1 |
26.6 |
7 |
9 |
2 |
26.4 |
8 |
9 |
3 |
NA |
NA |
10 |
1 |
25.5 |
8 |
10 |
2 |
25.7 |
7 |
10 |
3 |
24.9 |
9 |