【问题标题】:pivot_longer for multiple observations in a rowpivot_longer 用于连续的多个观察
【发布时间】:2021-07-15 18:02:16
【问题描述】:

我有一个数据集,其中包含 1 行内的多个观察值,我试图将其重塑为长格式。这是数据的样子

    df_have <- data.frame(group = c(1,2), p1_age = c(18,30), p1_sex = c("male", "male"),
                   p2_age = c(22,51), p2_sex = c("female", "male"))

  group p1_age p1_sex p2_age p2_sex
1     1     18   male     22 female
2     2     30   male     51   male

我想要重塑的人和变量会更多。我想重塑它,使它看起来像这样:

    df_want <- data.frame(person = c(1,2,1,2), group = c(1,1,2,2), age = c(18,22,30,51),
                   sex = c("male", "female", "male", "male"))
  person group age    sex
1      1     1  18   male
2      2     1  22 female
3      1     2  30   male
4      2     2  51   male

我尝试在 pivot_longer 步骤中使用“.value”来尝试生成我想要的内容,但我无法弄清楚。

【问题讨论】:

    标签: r reshape tidyr


    【解决方案1】:

    我们可以使用pivot_longer 并指定names_pattern 来捕获_ 后面的数字(\\d+)和单词(\\w+)

    library(dplyr)
    library(tidyr)
    df_have %>%
         pivot_longer(cols = -group, names_to = c("person", ".value"),
           names_pattern = ".(\\d+)_(\\w+)")%>% 
         mutate(person = as.integer(person))
    

    -输出

    # A tibble: 4 x 4
      group person   age sex   
      <dbl> <int>  <dbl> <chr> 
    1     1 1         18 male  
    2     1 2         22 female
    3     2 1         30 male  
    4     2 2         51 male  
    

    【讨论】:

      【解决方案2】:
      library(tidyverse)
      pivot_longer(df_have, -group, names_to = c("person", ".value"), names_sep = "_")
      
      # A tibble: 4 x 4
        group person    age sex   
        <dbl>  <chr> <dbl> <chr> 
      1     1  p1       18 male  
      2     1  p2       22 female
      3     2  p1       30 male  
      4     2  p2       51 male  
      

      【讨论】:

      • 一种将“人”设为仅包含数字数据的整数变量的方法会更好。不过这很有帮助!
      • @milan_filip 在这种情况下,您将需要 names_pattern = '(\\d+)_(.*)' 而不是 names_sep = '_' 参数。或者,一旦你运行上面的代码,你就可以使用 `...%>% mutate(parse_integer(person))` 来获取person 的整数部分
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多