我正在进行一项关于 54 种疾病的横断面在线研究,并且有 10 个变量/列作为参与者的背景信息,然后参与者被随机分配到一组 9 种不同的疾病(对于每种疾病,我有 20 个问题,开头是表示疾病类型的列名:epi_fam、epi_exp..、am_exp.、autism_fam、autism_exp 等)。
我正在尝试以有效的方式将数据从宽格式转换为长格式,以便我有一个指示疾病种类的新列,但我不知道该怎么做。
有人有想法吗?
提前致谢!
L
我尝试使用tidyr的pivotlonger函数,但我不使用疾病列名称来管理这个东西。
您可以使用
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