我有宽格式的数据文件,带有一组重复变量(var1 var2,如下)
数据有:
| ID | background vars| var1.A | var2.A | var1.B | var2.B | var1.C | var2.C |
| -: | :------------- |:------:|:------:|:------:|:------:|:------:|:------:|
| 1 | data1 | 1 | 2 | 3 | 4 | 5 | 6 |
| 2 | data2 | 7 | 8 | 9 | 10 | 11 | 12 |
Run Code Online (Sandbox Code Playgroud)
我需要将其“半途”重塑为长格式,即将每个变量组放在一起(宽),并将每个重复放在不同的行(长)中。
想要的数据:
| ID | background vars | recurrence | var1 | var2 |
| -: | :-------------- |:----------:|:------:|:------:|
| 1 | data1 | A | 1 | 2 |
| 1 | data1 | B | 3 | 4 |
| 1 | data1 | C | 5 | 6 |
| 2 | data2 | A | 7 | 8 |
| 2 | data2 | B | 9 | 10 |
| 2 | data2 | C | 11 | 12 |
Run Code Online (Sandbox Code Playgroud)
我使用 reshape() Gather() 和 Melt() 找到了一些解决方案。然而,所有这些都会将所有变量折叠为长格式,并且不允许某些变量保持“宽”)。
如何使用 R 以这种方式塑造数据?
'.value'在参数中使用关键字names_to可将列名的该部分保留为宽格式:
tidyr::pivot_longer(df, c(-ID, -`background vars`),
names_sep = '\\.',
names_to = c('.value', 'recurrence'))
#> # A tibble: 6 x 5
#> ID `background vars` recurrence var1 var2
#> <int> <chr> <chr> <int> <int>
#> 1 1 data1 A 1 2
#> 2 1 data1 B 3 4
#> 3 1 data1 C 5 6
#> 4 2 data2 A 7 8
#> 5 2 data2 B 9 10
#> 6 2 data2 C 11 1
Run Code Online (Sandbox Code Playgroud)