大数据集如何将宽数据转换为长数据格式?

问题描述 投票:0回答:1

我正在进行一项关于 54 种疾病的横断面在线研究,并且有 10 个变量/列作为参与者的背景信息,然后参与者被随机分配到一组 9 种不同的疾病(对于每种疾病,我有 20 个问题,开头是表示疾病类型的列名:epi_fam、epi_exp..、am_exp.、autism_fam、autism_exp 等)。

我正在尝试以有效的方式将数据从宽格式转换为长格式,以便我有一个指示疾病种类的新列,但我不知道该怎么做。

有人有想法吗?

提前致谢!

L

我尝试使用tidyr的pivotlonger函数,但我不使用疾病列名称来管理这个东西。

r bigdata survey long-format-data wide-format-data
1个回答
0
投票

您可以使用

pivot_longer
包中的
tidyr
函数。我使用了三列作为列 id,年龄和性别作为背景信息,并使用两种类型的疾病作为样本。请注意,
names_to
参数的值顺序取决于数据中变量名称的结构。

library(tidyr)

df <- data.frame(id = seq(1, 5, 1),
                 age = c(29, 32, 45, 75, 39),
                 sex = c("m", "f", "m","m", "f"),
                 epi_fam = c(1, 0, 0, 1, 1),
                 epi_exp = c(1, 1, 0, 0, 1),
                 ms_fam = c(0, 0, 1, 1, 0),
                 ms_exp = c(1, 1, 1, 0, 0))

df
#>   id age sex epi_fam epi_exp ms_fam ms_exp
#> 1  1  29   m       1       1      0      1
#> 2  2  32   f       0       1      0      1
#> 3  3  45   m       0       0      1      1
#> 4  4  75   m       1       0      1      0
#> 5  5  39   f       1       1      0      0

idcols <- names(df[,1:3])

pivot_longer(data = df,
             cols = -c(all_of(idcols)), 
             names_to = c("illness", ".value"),
             names_sep = "_") 
#> # A tibble: 10 × 6
#>       id   age sex   illness   fam   exp
#>    <dbl> <dbl> <chr> <chr>   <dbl> <dbl>
#>  1     1    29 m     epi         1     1
#>  2     1    29 m     ms          0     1
#>  3     2    32 f     epi         0     1
#>  4     2    32 f     ms          0     1
#>  5     3    45 m     epi         0     0
#>  6     3    45 m     ms          1     1
#>  7     4    75 m     epi         1     0
#>  8     4    75 m     ms          1     0
#>  9     5    39 f     epi         1     1
#> 10     5    39 f     ms          0     0

创建于 2024-04-24,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.