【问题标题】:How to change grouped data in ungrouped data如何更改未分组数据中的分组数据
【发布时间】:2022-01-14 05:12:05
【问题描述】:

我已将要转换为未分组数据的分组数据。

year<-c(rep(2014,4),rep(2015,4))
Age<-rep(c(22,23,24,25),2)
n<-c(1,1,3,2,0,2,3,1)
mydata<-data.frame(year,Age,n)

我想要从前一个创建的如下数据集。

   year Age
1  2014  22
2  2014  23
3  2014  24
4  2014  24
5  2014  24
6  2014  25
7  2014  25
8  2015  23
9  2015  23
10 2015  24
11 2015  24
12 2015  24
13 2015  25

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    这是一个 tidyverse 解决方案:

    library(tidyverse)
    mydata %>%
      uncount(n)
    

    给出:

       year Age
    1  2014  22
    2  2014  23
    3  2014  24
    4  2014  24
    5  2014  24
    6  2014  25
    7  2014  25
    8  2015  23
    9  2015  23
    10 2015  24
    11 2015  24
    12 2015  24
    13 2015  25
    

    【讨论】:

      【解决方案2】:

      您也可以为此使用tidyr 语法:

      library(tidyr)
      
      year<-c(rep(2014,4),rep(2015,4))
      Age<-rep(c(22,23,24,25),2)
      n<-c(1,1,3,2,0,2,3,1)
      mydata<-data.frame(year,Age,n)
      
      uncount(mydata, n)
      #>    year Age
      #> 1  2014  22
      #> 2  2014  23
      #> 3  2014  24
      #> 4  2014  24
      #> 5  2014  24
      #> 6  2014  25
      #> 7  2014  25
      #> 8  2015  23
      #> 9  2015  23
      #> 10 2015  24
      #> 11 2015  24
      #> 12 2015  24
      #> 13 2015  25
      

      当然你不应该仅仅因为它是tidyr 就使用tidyr :) An alternate view of the Tidyverse "dialect" of the R language, and its promotion by RStudio.

      【讨论】:

      • 感谢您的注意。请考虑答复时间。虽然我编辑了我的答案,但因为我认为uncount来自dplyr,所以我犯了错误,但答案的核心没有改变,比@deschen发布的要早。
      【解决方案3】:

      我们可以使用tidyr::complete

      library(tidyr)
      library(dplyr)
      
      mydata %>% group_by(year, Age) %>%
          complete(n = seq_len(n)) %>%
          select(-n) %>%
          ungroup()
      
      # A tibble: 14 × 2
          year   Age
         <dbl> <dbl>
       1  2014    22
       2  2014    23
       3  2014    24
       4  2014    24
       5  2014    24
       6  2014    25
       7  2014    25
       8  2015    23
       9  2015    23
      10  2015    24
      11  2015    24
      12  2015    24
      13  2015    25
      14  2015    22
      

      【讨论】:

        【解决方案4】:

        试试

        mydata[rep(1:nrow(mydata),mydata$n),]
        
            year Age n
        1   2014  22 1
        2   2014  23 1
        3   2014  24 3
        3.1 2014  24 3
        3.2 2014  24 3
        4   2014  25 2
        4.1 2014  25 2
        6   2015  23 2
        6.1 2015  23 2
        7   2015  24 3
        7.1 2015  24 3
        7.2 2015  24 3
        8   2015  25 1
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-16
          • 1970-01-01
          • 2020-09-14
          • 2022-12-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-20
          • 1970-01-01
          相关资源
          最近更新 更多