根据行中的值将一行分成多行
separate one row into multiple based on value in row
我正在使用与此类似的数据框:
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 行。关于要使用的功能有什么想法或建议吗?非常感谢。
您可以使用 dplyr
和 tidyr
。让 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)
returns
# 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")
我正在使用与此类似的数据框:
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 行。关于要使用的功能有什么想法或建议吗?非常感谢。
您可以使用 dplyr
和 tidyr
。让 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)
returns
# 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")