我繼承了一個資料集,其中資料(個人的大小)在單元格中列為逗號分隔值,例如:
| 日期 | 物種1 | 物種2 |
|---|---|---|
| 073022 | 22,44 | 88,84,84 |
| 072822 | 35,67,19 | 78,73 |
我需要的是在保留元資料的同時拉出這些尺寸,例如:
| 日期 | 物種 | 尺寸 |
|---|---|---|
| 073022 | 物種1 | 22 |
| 073022 | 物種1 | 44 |
| 073022 | 物種2 | 88 |
| 073022 | 物種2 | 84 |
等等...
關于如何做到這一點的任何想法?
我沒有嘗試太多來解決這個問題。我知道答案可能包括 strsplit、unnest 和/或分離,但我無法弄清楚如何應用它們。
uj5u.com熱心網友回復:
一個選項將使用來自 tidyverse 的 pivot、str_split、separate 和 unnest。
library(dplyr)
df <- tibble::tribble(
~date, ~species1, ~species2,
073022, "22,44", "88,84,84",
072822, "35,67,19", "78,73"
)
df %>%
tidyr::pivot_longer(c(species1, species2)) %>%
mutate(value = stringr::str_split(value, ",")) %>%
tidyr::unnest(value)
#> # A tibble: 10 × 3
#> date name value
#> <dbl> <chr> <chr>
#> 1 73022 species1 22
#> 2 73022 species1 44
#> 3 73022 species2 88
#> 4 73022 species2 84
#> 5 73022 species2 84
#> 6 72822 species1 35
#> 7 72822 species1 67
#> 8 72822 species1 19
#> 9 72822 species2 78
#> 10 72822 species2 73
使用reprex v2.0.2創建于 2022-10-25
uj5u.com熱心網友回復:
這是一個基于 ejn88 腳本的變體,但使用 tidyr 的 separate_rows() 函式來獲得更緊湊的代碼。
library(dplyr)
library(tidyr)
df <- tibble::tribble(
~date, ~species1, ~species2,
073022, "22,44", "88,84,84",
072822, "35,67,19", "78,73"
)
df %>%
pivot_longer(c(species1, species2)) %>%
separate_rows(value, sep=",")
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/520933.html
標籤:rCSV蒂迪尔
