宽到长格式数据帧,其中宽数据帧具有成对列(AAA1 具有 value11、BBB1 具有 value22、CCC1 具有 value33 等)

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

我正在尝试转换包含以下列的宽数据框:

id, age, gender, AAA1, value11, AAA2, value12, ..., BBB1, value21, BBB2, value22, ..., CCC1, value31, CCC2, value32,...

id, age, gender,
type = AAA, BBB, CCC, ...
stage = * where AAA*, BBB*, CCC*, ...
period = ** where value**
value = actual values under value11, value12, ...., value21, value22, ...

我似乎找不到使用 dplyr 来执行此操作的好方法。感谢对此的任何帮助。

r dplyr tidyverse reshape2
1个回答
0
投票

没有任何数据,很难知道数据帧的真正格式是什么。话虽这么说,我想象

XXX##
只是该名称的字符串?给定您想要的输出,看起来所有类型信息都保存在
value##
列名称中,因此我们可能只需删除
XXX##
列,
pivot_longer
并在之后导出类型数据。

library(tidyverse)

#test data
set.seed(25)
example_data <- tibble(id = letters[1:5],
       age = 21:25,
       gender = "m",
       AAA1 = "AAA1",
       value11 = runif(5),
       AAA2 = "AAA2",
       value12 = runif(5),
       BBB1 = "BBB1",
       value21 = runif(5),
       BBB2 = "BBB2",
       value22 = runif(5),
       )

example_data
#> # A tibble: 5 x 11
#>   id      age gender AAA1  value11 AAA2  value12 BBB1  value21 BBB2  value22
#>   <chr> <int> <chr>  <chr>   <dbl> <chr>   <dbl> <chr>   <dbl> <chr>   <dbl>
#> 1 a        21 m      AAA1    0.416 AAA2   0.985  BBB1    0.328 BBB2    0.148
#> 2 b        22 m      AAA1    0.695 AAA2   0.626  BBB1    0.364 BBB2    0.540
#> 3 c        23 m      AAA1    0.149 AAA2   0.338  BBB1    0.959 BBB2    0.728
#> 4 d        24 m      AAA1    0.897 AAA2   0.0668 BBB1    0.589 BBB2    0.477
#> 5 e        25 m      AAA1    0.124 AAA2   0.282  BBB1    0.695 BBB2    0.729


#solution
example_data |>
  select(id, age, gender, contains("value")) |>
  pivot_longer(cols = contains("value"), 
               names_to = c("stage", "period"), 
               values_to = "value", 
               names_pattern = "value(.)(.)", 
               names_transform = as.numeric) |>
  mutate(type = map_chr(stage, \(x) paste(rep(LETTERS[x], 3), collapse = "" )), 
         .after = gender)
#> # A tibble: 20 x 7
#>    id      age gender type  stage period  value
#>    <chr> <int> <chr>  <chr> <dbl>  <dbl>  <dbl>
#>  1 a        21 m      AAA       1      1 0.416 
#>  2 a        21 m      AAA       1      2 0.985 
#>  3 a        21 m      BBB       2      1 0.328 
#>  4 a        21 m      BBB       2      2 0.148 
#>  5 b        22 m      AAA       1      1 0.695 
#>  6 b        22 m      AAA       1      2 0.626 
#>  7 b        22 m      BBB       2      1 0.364 
#>  8 b        22 m      BBB       2      2 0.540 
#>  9 c        23 m      AAA       1      1 0.149 
#> 10 c        23 m      AAA       1      2 0.338 
#> 11 c        23 m      BBB       2      1 0.959 
#> 12 c        23 m      BBB       2      2 0.728 
#> 13 d        24 m      AAA       1      1 0.897 
#> 14 d        24 m      AAA       1      2 0.0668
#> 15 d        24 m      BBB       2      1 0.589 
#> 16 d        24 m      BBB       2      2 0.477 
#> 17 e        25 m      AAA       1      1 0.124 
#> 18 e        25 m      AAA       1      2 0.282 
#> 19 e        25 m      BBB       2      1 0.695 
#> 20 e        25 m      BBB       2      2 0.729
© www.soinside.com 2019 - 2024. All rights reserved.