首页 > 解决方案 > 根据行中的值将一行分成多个

问题描述

我采用类似于以下的数据框:

GISBLong GISBLat B 飞行路线 B月 鸟的数量
-85.41667 42.41667 3 6 3
-97.25000 36.0833 2 7 2

并将其更改为:

GISBLong GISBLat B 飞行路线 B月 鸟类编号
-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 行。关于要使用的功能有什么想法或建议吗?非常感谢。

标签: rsplitrows

解决方案


您可以使用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")

推荐阅读