【问题标题】:separate one row into multiple based on value in row根据行中的值将一行分成多个
【发布时间】:2021-05-25 19:57:30
【问题描述】:

我正在取一个类似这样的数据框:

GISBLong GISBLat B Flyway B Month Count of Birds
-85.41667 42.41667 3 6 3
-97.25000 36.0833 2 7 2

把它改成这样:

GISBLong GISBLat B Flyway B Month Bird ID
-85.41667 42.41667 3 6 1.1
-85.41667 42.41667 3 6 1.2
-85.41667 42.41667 3 6 1.3
-97.25000 36.0833 2 7 2.1
-97.25000 36.0833 2 7 2.2

因此,按“鸟类计数”中的数字拆分行。目前 1 行代表多只鸟,我希望每只鸟有 1 行。关于要使用的功能有什么想法或建议吗?非常感谢。

【问题讨论】:

    标签: r split rows


    【解决方案1】:

    您可以使用dplyrtidyr。让df 成为你的data.frame。

    library(dplyr)
    library(tidyr)
    
    df %>%
      mutate(id=row_number()) %>%
      uncount(Count_of_Birds) %>%
      group_by(id) %>%
      mutate(Bird_ID = paste0(id, ".", row_number())) %>%
      ungroup() %>%
      select(-id)
    

    返回

    # A tibble: 5 x 5
      GISBLong GISBLat B_Flyway B_Month Bird_ID
         <dbl>   <dbl>    <dbl>   <dbl> <chr>  
    1    -85.4    42.4        3       6 1.1    
    2    -85.4    42.4        3       6 1.2    
    3    -85.4    42.4        3       6 1.3    
    4    -97.2    36.1        2       7 2.1    
    5    -97.2    36.1        2       7 2.2  
    

    数据

    df <- readr::read_table2("GISBLong  GISBLat     B_Flyway    B_Month     Count_of_Birds
                             -85.41667  42.41667    3   6   3
                             -97.25000  36.0833     2   7   2")
    

    【讨论】:

      猜你喜欢
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 2023-04-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      相关资源
      最近更新 更多