ΠΠ°ΠΊΠ΅Ρ tidyr Π²Ρ
ΠΎΠ΄ΠΈΡ Π² ΡΠ΄ΡΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π½Π° ΡΠ·ΡΠΊΠ΅ R β tidyverse.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° β ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΊ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎΠΌΡ Π²ΠΈΠ΄Ρ.
ΠΠ° Π₯Π°Π±ΡΠ΅ ΡΠΆΠ΅ Π΅ΡΡΡ
SJK: Π€ΡΠ½ΠΊΡΠΈΠΈ gather() ΠΈ spread() Π±ΡΠ΄ΡΡ ΡΡΠΈΡΠ°ΡΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌΠΈ?
Hadley Wickham: Π ΠΊΠ°ΠΊΠΎΠΉ ΡΠΎ ΠΌΠ΅ΡΠ΅. ΠΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½Π΅ΠΌ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΈ ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡ Π² Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ, Π½ΠΎ ΠΎΠ½ΠΈ ΠΈ Π΄Π°Π»Π΅Π΅ Π±ΡΠ΄Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ.
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
ΠΡΠ»ΠΈ Π²Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅ΡΠ΅ΡΡ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ Π΄Π°Π½Π½ΡΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Π°ΠΌ Π±ΡΠ΄ΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Ρ ΠΌΠΎΠΈ
ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ TidyData ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π² ΠΏΠ°ΠΊΠ΅Ρ tidyr ΠΠΎΠ²Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π² Π΄Π»ΠΈΠ½Π½ΡΠΉ ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ tidyr 0.8.3.9000 ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° Π½ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π² Π΄Π»ΠΈΠ½Π½ΡΠΉ Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ(.value) ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°ΡΠ° ΡΡΠ΅ΠΉΠΌΠΎΠ² ΠΈΠ· Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° ΠΊ ΡΠΈΡΠΎΠΊΠΎΠΌΡ ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠ΅ΠΉ tidyr ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ TidyData
Π¦Π΅Π»Ρ tidyr β ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΊ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠΌΡ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎΠΌΡ Π²ΠΈΠ΄Ρ. ΠΠΊΠΊΡΡΠ°ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ β ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅, Π³Π΄Π΅:
- ΠΠ°ΠΆΠ΄Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΠΎΠ»Π±ΡΠ΅.
- ΠΠ°ΠΆΠ΄ΠΎΠ΅ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ β ΡΡΠΎ ΡΡΡΠΎΠΊΠ°.
- ΠΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ΅ΠΉΠΊΠΎΠΉ.
Π‘ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΠΊ tidy data Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠ΅ ΠΈ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Π°Π½Π°Π»ΠΈΠ·Π°.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π² ΠΏΠ°ΠΊΠ΅Ρ tidyr
tidyr ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ°Π±Π»ΠΈΡ:
fill()
β Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΏΡΡΠ΅Π½Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΡΡΠΎΠ»Π±ΡΠ΅, ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ;separate()
β ΡΠ°Π·Π±ΠΈΠ²Π°Π΅Ρ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π· ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ;unite()
β ΡΠΎΠ²Π΅ΡΡΠ°Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΎΠ΄Π½ΠΎ, Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈseparate()
;pivot_longer()
β ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΠ°Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π² Π΄Π»ΠΈΠ½Π½ΡΠΉ;pivot_wider()
β ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΠ°Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π² ΡΠΈΡΠΎΠΊΠΈΠΉ. ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡpivot_longer()
.gather()
ΡΡΡΠ°ΡΠ΅Π²ΡΠ°Ρ β ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΠ°Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π² Π΄Π»ΠΈΠ½Π½ΡΠΉ;spread()
ΡΡΡΠ°ΡΠ΅Π²ΡΠ°Ρ β ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΠ°Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π² ΡΠΈΡΠΎΠΊΠΈΠΉ. ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡgather()
.
ΠΠΎΠ²Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π² Π΄Π»ΠΈΠ½Π½ΡΠΉ ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ
Π Π°Π½Π΅Π΅ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ gather()
ΠΈ spread()
. ΠΠ° Π³ΠΎΠ΄Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ ΡΡΠ°Π»ΠΎ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π²ΠΊΠ»ΡΡΠ°Ρ Π°Π²ΡΠΎΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠ°, Π½Π°Π·Π²Π°Π½ΠΈΡ ΡΡΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΈ ΠΈΡ
Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π±ΡΠ»ΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½Ρ, ΠΈ Π²ΡΠ·ΡΠ²Π°Π»ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ ΠΈΡ
ΠΏΠΎΠΈΡΠΊΠ΅ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠ°Ρ ΠΈΠ· ΡΡΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π΄Π°ΡΠ° ΡΡΠ΅ΠΉΠΌ ΠΈΠ· ΡΠΈΡΠΎΠΊΠΎ Π² Π΄Π»ΠΈΠ½Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΠ΅ΠΌ Π² tidyr Π±ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π΄Π²Π΅ Π½ΠΎΠ²ΡΠ΅, Π²Π°ΠΆΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π΄Π°ΡΠ° ΡΡΠ΅ΠΉΠΌΠΎΠ².
ΠΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ pivot_longer()
ΠΈ pivot_wider()
Π±ΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ ΠΏΠΎΠ΄ Π²ΠΏΠ΅ΡΠ°ΡΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° cdata, ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΠΆΠΎΠ½ΠΎΠΌ ΠΠ°ΡΠ½ΡΠΎΠΌ ΠΈ ΠΠΈΠ½ΠΎΠΉ ΠΡΠΌΠ΅Π»Ρ.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ tidyr 0.8.3.9000
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π½ΠΎΠ²ΠΎΠΉ, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° tidyr 0.8.3.9000, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
devtools::install_github("tidyverse/tidyr")
ΠΠ° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ°ΡΡΠΈ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² dev Π²Π΅ΡΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° Π½Π° GitHub.
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° Π½ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΡΡΠ°ΡΡΠ΅ ΡΠΊΡΠΈΠΏΡΡ Π½Π° ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΎΠ²ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎ, Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ, Ρ Π²ΠΎΠ·ΡΠΌΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΡΠ°ΡΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΡ ΠΊΠ°ΠΊ ΡΡΠΈ ΠΆΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½ΠΎΠ²ΡΡ
pivot_*()
ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° ΠΊ Π΄Π»ΠΈΠ½Π½ΠΎΠΌΡ.
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ gather
# example
library(dplyr)
stocks <- data.frame(
time = as.Date('2009-01-01') + 0:9,
X = rnorm(10, 0, 1),
Y = rnorm(10, 0, 2),
Z = rnorm(10, 0, 4)
)
# old
stocks_gather <- stocks %>% gather(key = stock,
value = price,
-time)
# new
stocks_long <- stocks %>% pivot_longer(cols = -time,
names_to = "stock",
values_to = "price")
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° ΠΊ ΡΠΈΡΠΎΠΊΠΎΠΌΡ.
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ spread
# old
stocks_spread <- stocks_gather %>% spread(key = stock,
value = price)
# new
stock_wide <- stocks_long %>% pivot_wider(names_from = "stock",
values_from = "price")
Π’.ΠΊ. Π² ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΡ
Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ
ΡΠ°Π±ΠΎΡΡ Ρ pivot_longer()
ΠΈ pivot_wider()
, Π² ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ stocks Π½Π΅Ρ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ
Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°Ρ
names_to ΠΈ values_to ΠΈΡ
ΠΈΠΌΠ΅Π½Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π² ΠΊΠ°Π²ΡΡΠΊΠ°Ρ
.
Π’Π°Π±Π»ΠΈΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Π°ΠΌ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π° ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠ΅ΠΉ tidyr.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΎΡ Π°Π²ΡΠΎΡΠ°
ΠΠ΅ΡΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΉ Π΄Π°Π»Π΅Π΅ ΡΠ΅ΠΊΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π΄Π°ΠΏΡΠΈΠ²Π½ΡΠΌ, Ρ Π±Ρ Π΄Π°ΠΆΠ΅ ΡΠΊΠ°Π·Π°Π» ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΌ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠΌ
Π²ΠΈΠ½ΡΠ΅ΡΠΊΠΈ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ tidyverse.
ΠΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π² Π΄Π»ΠΈΠ½Π½ΡΠΉ
pivot_longer ()
β Π΄Π΅Π»Π°Π΅Ρ Π½Π°Π±ΠΎΡΡ Π΄Π°Π½Π½ΡΡ
Π΄Π»ΠΈΠ½Π½Π΅Π΅, ΡΠΌΠ΅Π½ΡΡΠ°Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ.
ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π² ΡΡΠ°ΡΡΠ΅ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π½ΡΠΆΠ½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ:
library(tidyr)
library(dplyr)
library(readr)
ΠΠΎΠΏΡΡΡΠΈΠΌ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ°Π±Π»ΠΈΡΠ° c ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ ΠΎΠΏΡΠΎΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ (ΡΡΠ΅Π΄ΠΈ ΠΏΡΠΎΡΠ΅Π³ΠΎ) ΡΠΏΡΠ°ΡΠΈΠ²Π°Π»ΠΈ Π»ΡΠ΄Π΅ΠΉ ΠΎΠ± ΠΈΡ ΡΠ΅Π»ΠΈΠ³ΠΈΠΈ ΠΈ Π³ΠΎΠ΄ΠΎΠ²ΠΎΠΌ Π΄ΠΎΡ ΠΎΠ΄Π΅:
#> # A tibble: 18 x 11
#> religion `<$10k` `$10-20k` `$20-30k` `$30-40k` `$40-50k` `$50-75k`
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 Agnostic 27 34 60 81 76 137
#> 2 Atheist 12 27 37 52 35 70
#> 3 Buddhist 27 21 30 34 33 58
#> 4 Catholic 418 617 732 670 638 1116
#> 5 Donβt kβ¦ 15 14 15 11 10 35
#> 6 Evangel⦠575 869 1064 982 881 1486
#> 7 Hindu 1 9 7 9 11 34
#> 8 Histori⦠228 244 236 238 197 223
#> 9 Jehovah⦠20 27 24 24 21 30
#> 10 Jewish 19 19 25 25 30 95
#> # β¦ with 8 more rows, and 4 more variables: `$75-100k` <dbl>,
#> # `$100-150k` <dbl>, `>150k` <dbl>, `Don't know/refused` <dbl>
ΠΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΡΠ΅Π»ΠΈΠ³ΠΈΠΈ ΡΠ΅ΡΠΏΠΎΠ½Π΄Π΅Π½ΡΠΎΠ² Π² ΡΡΡΠΎΠΊΠ°Ρ
, Π° ΡΡΠΎΠ²Π΅Π½Ρ Π΄ΠΎΡ
ΠΎΠ΄Π° ΡΠ°Π·Π±ΡΠΎΡΠ°Π½ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ ΡΡΠΎΠ»Π±ΡΠΎΠ². ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΠΏΠΎΠ½Π΄Π΅Π½ΡΠΎΠ² ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ Ρ
ΡΠ°Π½ΠΈΡΡΡ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ
ΡΡΠ΅Π΅ΠΊ Π½Π° ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΠ΅Π»ΠΈΠ³ΠΈΠΈ ΠΈ ΡΡΠΎΠ²Π½Ρ Π΄ΠΎΡ
ΠΎΠ΄Π°. Π§ΡΠΎΠ±Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΡΠ°Π±Π»ΠΈΡΡ ΠΊ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎΠΌΡ, ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌΡ ΡΠΎΡΠΌΠ°ΡΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ pivot_longer()
:
pew %>%
pivot_longer(cols = -religion, names_to = "income", values_to = "count")
pew %>%
pivot_longer(cols = -religion, names_to = "income", values_to = "count")
#> # A tibble: 180 x 3
#> religion income count
#> <chr> <chr> <dbl>
#> 1 Agnostic <$10k 27
#> 2 Agnostic $10-20k 34
#> 3 Agnostic $20-30k 60
#> 4 Agnostic $30-40k 81
#> 5 Agnostic $40-50k 76
#> 6 Agnostic $50-75k 137
#> 7 Agnostic $75-100k 122
#> 8 Agnostic $100-150k 109
#> 9 Agnostic >150k 84
#> 10 Agnostic Don't know/refused 96
#> # β¦ with 170 more rows
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ pivot_longer()
- ΠΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ cols, ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡΠΎΠ»Π±ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡΠ΅Π΄Π΅Π½ΠΈΡΡ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ΅ ΡΡΠΎΠ»Π±ΡΡ, ΠΊΡΠΎΠΌΠ΅ time.
- ΠΡΠ³ΡΠΌΠ΅Π½Ρ names_to Π΄Π°Π΅Ρ ΠΈΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½Π° ΠΈΠ· ΠΈΠΌΡΠ½ ΡΡΠΎΠ»Π±ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΠ»ΠΈ.
- values_to Π΄Π°Π΅Ρ ΠΈΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½Π° ΠΈΠ· Π΄Π°Π½Π½ΡΡ , Ρ ΡΠ°Π½ΡΡΠΈΡ ΡΡ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ ΡΡΠ΅Π΅ΠΊ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ½Π½ΡΡ ΡΡΠΎΠ»Π±ΡΠΎΠ².
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ
ΠΡΠΎ Π½ΠΎΠ²ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΠΏΠ°ΠΊΠ΅ΡΠ° tidyr, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π½Π΅Π΅ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π±ΡΠ» Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½.
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ β ΡΡΠΎ ΡΡΠ΅ΠΉΠΌ Π΄Π°Π½Π½ΡΡ , ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΡΠΎΠ»Π±ΡΡ Π² Π½ΠΎΠ²ΠΎΠΌ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΌ Π΄Π°ΡΠ° ΡΡΠ΅ΠΉΠΌΠ΅, ΠΈ Π΄Π²ΡΠΌΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΡΠΎΠ»Π±ΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ.:
- .name ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΡΠΎΠ»Π±ΡΠ°.
- .value ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠΌΡ ΡΡΠΎΠ»Π±ΡΠ°, Π² ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄ΡΡ Π²Ρ ΠΎΠ΄ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ΅Π΅ΠΊ.
ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠΎΠ»Π±ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΡΡΠ°ΠΆΠ°ΡΡ ΡΠΎ, ΠΊΠ°ΠΊ Π² Π½ΠΎΠ²ΠΎΠΌ ΡΡΠΎΠ»Π±ΡΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠΆΠΈΠΌΠ°Π΅ΠΌΡΡ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΠΈΠ· .name.
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅, Ρ ΡΠ°Π½ΡΡΠΈΠ΅ΡΡ Π² ΠΈΠΌΠ΅Π½ΠΈ ΡΡΠΎΠ»Π±ΡΠ°, Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠΎΠ»Π±ΡΠ° ΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΡΡΠΎΠ»Π±ΡΠΎΠΌ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΠΎΠΉ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΡΠΎΠ»Π±ΡΠ°, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅ ΡΠ΅ΠΉΡΠ°Ρ ΡΠ°ΠΊΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠΌ, Π½ΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π²ΡΡ ΡΡΠ°Π½Π΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅.
Π‘ΠΌΡΡΠ» ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΈ Π·Π°Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΊ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌΠΎΠΌΡ Π΄Π°ΡΠ°ΡΡΠ΅ΠΉΠΌΡ.
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠΌΠΈ ΠΏΡΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠ· ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° Π² Π΄Π»ΠΈΠ½Π½ΡΠΉ ΡΠ»ΡΠΆΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ pivot_longer_spec()
.
ΠΠ°ΠΊ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΎΠ½Π° Π±Π΅ΡΡΡ Π»ΡΠ±ΠΎΠΉ Π΄Π°ΡΠ° ΡΡΠ΅ΠΉΠΌ, ΠΈ ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ Π΅Π³ΠΎ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π²ΡΡΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π΄Π°Π²Π°ΠΉΡΠ΅ Π²ΠΎΠ·ΠΌΡΠΌ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ who, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ tidyr. ΠΡΠΎΡ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΠΎΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π·Π΄ΡΠ°Π²ΠΎΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΎ Π·Π°Π±ΠΎΠ»Π΅Π²Π°Π΅ΠΌΠΎΡΡΠΈ ΡΡΠ±Π΅ΡΠΊΡΠ»ΡΠ·ΠΎΠΌ.
who
#> # A tibble: 7,240 x 60
#> country iso2 iso3 year new_sp_m014 new_sp_m1524 new_sp_m2534
#> <chr> <chr> <chr> <int> <int> <int> <int>
#> 1 Afghan⦠AF AFG 1980 NA NA NA
#> 2 Afghan⦠AF AFG 1981 NA NA NA
#> 3 Afghan⦠AF AFG 1982 NA NA NA
#> 4 Afghan⦠AF AFG 1983 NA NA NA
#> 5 Afghan⦠AF AFG 1984 NA NA NA
#> 6 Afghan⦠AF AFG 1985 NA NA NA
#> 7 Afghan⦠AF AFG 1986 NA NA NA
#> 8 Afghan⦠AF AFG 1987 NA NA NA
#> 9 Afghan⦠AF AFG 1988 NA NA NA
#> 10 Afghan⦠AF AFG 1989 NA NA NA
#> # β¦ with 7,230 more rows, and 53 more variables
ΠΠΎΡΡΡΠΎΠΈΠΌ Π΅Π³ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ.
spec <- who %>%
pivot_longer_spec(new_sp_m014:newrel_f65, values_to = "count")
#> # A tibble: 56 x 3
#> .name .value name
#> <chr> <chr> <chr>
#> 1 new_sp_m014 count new_sp_m014
#> 2 new_sp_m1524 count new_sp_m1524
#> 3 new_sp_m2534 count new_sp_m2534
#> 4 new_sp_m3544 count new_sp_m3544
#> 5 new_sp_m4554 count new_sp_m4554
#> 6 new_sp_m5564 count new_sp_m5564
#> 7 new_sp_m65 count new_sp_m65
#> 8 new_sp_f014 count new_sp_f014
#> 9 new_sp_f1524 count new_sp_f1524
#> 10 new_sp_f2534 count new_sp_f2534
#> # β¦ with 46 more rows
ΠΠΎΠ»Ρ country, iso2, iso3 ΡΠΆΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ. ΠΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° ΠΏΠ΅ΡΠ΅Π²Π΅ΡΠ½ΡΡΡ ΡΡΠΎΠ»Π±ΡΡ Ρ new_sp_m014 ΠΏΠΎ newrel_f65.
Π Π½Π°Π·Π²Π°Π½ΠΈΡΡ ΡΡΠΈΡ ΡΡΠΎΠ»Π±ΡΠΎΠ² Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ:
- ΠΡΠ΅ΡΠΈΠΊΡ
new_
Π³ΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΎΠ»Π±Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎ Π½ΠΎΠ²ΡΡ ΡΠ»ΡΡΠ°ΡΡ Π·Π°Π±ΠΎΠ»Π΅Π²Π°Π½ΠΈΡ ΡΡΠ±Π΅ΡΠΊΡΠ»ΡΠΎΠΌ, ΡΠ΅ΠΊΡΡΠΈΠΉ Π΄Π°ΡΠ° ΡΡΠ΅ΠΉΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ Π½ΠΎΠ²ΡΠΌ Π·Π°Π±ΠΎΠ»Π΅Π²Π°Π½ΠΈΡΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠ΅ΡΠΈΠΊΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π½Π΅ Π½Π΅ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΡΠΌΡΡΠ»ΠΎΠ²ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ. sp
/rel
/sp
/ep
ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΏΠΎΡΠΎΠ± Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ Π·Π°Π±ΠΎΠ»Π΅Π²Π°Π½ΠΈΡ.m
/f
ΠΏΠΎΠ» ΠΏΠ°ΡΠΈΠ΅Π½ΡΠ°.014
/1524
/2535
/3544
/4554
/65
Π²ΠΎΠ·ΡΠ°ΡΡΠ½ΠΎΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΏΠ°ΡΠΈΠ΅Π½ΡΠ°.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΡΡΠΈ ΡΡΠΎΠ»Π±ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ extract()
, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
spec <- spec %>%
extract(name, c("diagnosis", "gender", "age"), "new_?(.*)_(.)(.*)")
#> # A tibble: 56 x 5
#> .name .value diagnosis gender age
#> <chr> <chr> <chr> <chr> <chr>
#> 1 new_sp_m014 count sp m 014
#> 2 new_sp_m1524 count sp m 1524
#> 3 new_sp_m2534 count sp m 2534
#> 4 new_sp_m3544 count sp m 3544
#> 5 new_sp_m4554 count sp m 4554
#> 6 new_sp_m5564 count sp m 5564
#> 7 new_sp_m65 count sp m 65
#> 8 new_sp_f014 count sp f 014
#> 9 new_sp_f1524 count sp f 1524
#> 10 new_sp_f2534 count sp f 2534
#> # β¦ with 46 more rows
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎΠ»Π±Π΅Ρ .name Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ Π½Π°Ρ ΠΈΠ½Π΄Π΅ΠΊΡ Π² ΠΈΠΌΠ΅Π½Π°Ρ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ .
ΠΠΎΠ» ΠΈ Π²ΠΎΠ·ΡΠ°ΡΡ (ΡΡΠΎΠ»Π±ΡΡ gender ΠΈ age) ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΡΠΈ ΡΡΠΎΠ»Π±ΡΡ Π² ΡΠ°ΠΊΡΠΎΡΡ:
spec <- spec %>%
mutate(
gender = factor(gender, levels = c("f", "m")),
age = factor(age, levels = unique(age), ordered = TRUE)
)
ΠΠ°ΠΊΠΎΠ½Π΅Ρ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Π½Π°ΠΌΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΊ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠΌΡ Π΄Π°ΡΠ° ΡΡΠ΅ΠΉΠΌΡ who Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ spec Π² ΡΡΠ½ΠΊΡΠΈΠΈ pivot_longer()
.
who %>% pivot_longer(spec = spec)
#> # A tibble: 405,440 x 8
#> country iso2 iso3 year diagnosis gender age count
#> <chr> <chr> <chr> <int> <chr> <fct> <ord> <int>
#> 1 Afghanistan AF AFG 1980 sp m 014 NA
#> 2 Afghanistan AF AFG 1980 sp m 1524 NA
#> 3 Afghanistan AF AFG 1980 sp m 2534 NA
#> 4 Afghanistan AF AFG 1980 sp m 3544 NA
#> 5 Afghanistan AF AFG 1980 sp m 4554 NA
#> 6 Afghanistan AF AFG 1980 sp m 5564 NA
#> 7 Afghanistan AF AFG 1980 sp m 65 NA
#> 8 Afghanistan AF AFG 1980 sp f 014 NA
#> 9 Afghanistan AF AFG 1980 sp f 1524 NA
#> 10 Afghanistan AF AFG 1980 sp f 2534 NA
#> # β¦ with 405,430 more rows
ΠΡΡ, ΡΡΠΎ ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π»ΠΈ, ΡΡ Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ(.value)
Π ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠΎΠ»Π±Π΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ .value ΡΠΎΠ΄Π΅ΡΠΆΠ°Π» ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΡΡΠΎ ΡΠ°ΠΊ ΠΈ Π±ΡΠ²Π°Π΅Ρ.
ΠΠΎ ΠΈΠ·ΡΠ΅Π΄ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ±ΡΠ°ΡΡ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ
Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΡΠΎΠ»Π±ΡΠΎΠ² Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ spread()
ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ.
ΠΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΉ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°Π½ ΠΈΠ·
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΡΠ΅Π½ΠΈΡΠΎΠ²Π°ΡΠ½ΡΠΉ Π΄Π°ΡΠ°ΡΡΠ΅ΠΉΠΌ.
family <- tibble::tribble(
~family, ~dob_child1, ~dob_child2, ~gender_child1, ~gender_child2,
1L, "1998-11-26", "2000-01-29", 1L, 2L,
2L, "1996-06-22", NA, 2L, NA,
3L, "2002-07-11", "2004-04-05", 2L, 2L,
4L, "2004-10-10", "2009-08-27", 1L, 1L,
5L, "2000-12-05", "2005-02-28", 2L, 1L,
)
family <- family %>% mutate_at(vars(starts_with("dob")), parse_date)
#> # A tibble: 5 x 5
#> family dob_child1 dob_child2 gender_child1 gender_child2
#> <int> <date> <date> <int> <int>
#> 1 1 1998-11-26 2000-01-29 1 2
#> 2 2 1996-06-22 NA 2 NA
#> 3 3 2002-07-11 2004-04-05 2 2
#> 4 4 2004-10-10 2009-08-27 1 1
#> 5 5 2000-12-05 2005-02-28 2 1
Π‘ΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π΄Π°ΡΠ° ΡΡΠ΅ΠΉΠΌ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎ Π΄Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ΅ΠΌΡΠΈ. Π ΡΠ΅ΠΌΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π²Π° ΡΠ΅Π±ΡΠ½ΠΊΠ°. ΠΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ΅Π±ΡΠ½ΠΊΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎ Π΄Π°ΡΠ΅ ΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ»Π΅, ΠΏΡΠΈΡΡΠΌ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ΅Π±ΡΠ½ΠΊΡ ΠΈΠ΄ΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΡΠΎΠ»Π±ΡΠ°Ρ , Π½Π°ΡΠ° Π·Π°Π΄Π°ΡΠ° ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌΡ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠΎΡΠΌΠ°ΡΡ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ Π΄Π²Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ΅Π±Π΅Π½ΠΊΠ΅: Π΅Π³ΠΎ ΠΏΠΎΠ» ΠΈ Π΄Π°ΡΠ° ΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ (ΡΡΠΎΠ»Π±ΡΡ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ dop ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π΄Π°ΡΡ ΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ, ΡΡΠΎΠ»Π±ΡΡ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ gender ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΏΠΎΠ» ΡΠ΅Π±ΡΠ½ΠΊΠ°). Π ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠ΄ΡΠΈ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΡΡΠΎΠ»Π±ΡΠ°Ρ
. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ, Π³Π΅Π½Π΅ΡΠΈΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠΎΠ»Π±Π΅Ρ .value
Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π΄Π²Π° ΡΠ°Π·Π½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
spec <- family %>%
pivot_longer_spec(-family) %>%
separate(col = name, into = c(".value", "child"))%>%
mutate(child = parse_number(child))
#> # A tibble: 4 x 3
#> .name .value child
#> <chr> <chr> <dbl>
#> 1 dob_child1 dob 1
#> 2 dob_child2 dob 2
#> 3 gender_child1 gender 1
#> 4 gender_child2 gender 2
ΠΡΠ°ΠΊ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΡΠΌ ΠΏΠΎ ΡΠ°Π³Π°ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΌ Π²ΡΡΠ΅ ΠΊΠΎΠ΄ΠΎΠΌ.
pivot_longer_spec(-family)
β ΡΠΎΠ·Π΄Π°ΡΠΌ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΆΠΈΠΌΠ°Π΅Ρ Π²ΡΠ΅ ΠΈΠΌΠ΅ΡΡΠΈΠ΅ΡΡ ΡΡΠΎΠ»Π±ΡΡ, ΠΊΡΠΎΠΌΠ΅ ΡΡΠΎΠ»Π±ΡΠ° family.separate(col = name, into = c(".value", "child"))
β ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠΎΠ»Π±Π΅Ρ .name, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠΌΠ΅Π½Π° ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΏΠΎΠ»Π΅ΠΉ, ΠΏΠΎ Π½ΠΈΠΆΠ½Π΅ΠΌΡ ΠΏΠΎΠ΄ΡΡΡΠΊΠΈΠ²Π°Π½ΠΈΡ ΠΈ Π·Π°Π½ΠΎΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΡΠΎΠ»Π±ΡΡ .value ΠΈ child.mutate(child = parse_number(child))
β ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Ρ child ΠΈΠ· ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ Π² ΡΠΈΡΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ .
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΊ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌΡ Π΄Π°ΡΠ°ΡΡΠ΅ΠΉΠΌΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΠΈ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΡΠ°Π±Π»ΠΈΡΡ ΠΊ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΌΡ Π²ΠΈΠ΄Ρ.
family %>%
pivot_longer(spec = spec, na.rm = T)
#> # A tibble: 9 x 4
#> family child dob gender
#> <int> <dbl> <date> <int>
#> 1 1 1 1998-11-26 1
#> 2 1 2 2000-01-29 2
#> 3 2 1 1996-06-22 2
#> 4 3 1 2002-07-11 2
#> 5 3 2 2004-04-05 2
#> 6 4 1 2004-10-10 1
#> 7 4 2 2009-08-27 1
#> 8 5 1 2000-12-05 2
#> 9 5 2 2005-02-28 1
ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ na.rm = TRUE
, ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΠ΅ΠΊΡΡΠ°Ρ ΡΠΎΡΠΌΠ° Π΄Π°Π½Π½ΡΡ
Π²ΡΠ½ΡΠΆΠ΄Π°Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π»ΠΈΡΠ½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠΉ. Π’.ΠΊ. Ρ ΡΠ΅ΠΌΡΠΈ 2 Π΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ΅Π±ΡΠ½ΠΎΠΊ, na.rm = TRUE
Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΡΠ΅ΠΌΡΡ 2 Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ Π² Π²ΡΡ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
.
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°ΡΠ° ΡΡΠ΅ΠΉΠΌΠΎΠ² ΠΈΠ· Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° ΠΊ ΡΠΈΡΠΎΠΊΠΎΠΌΡ
pivot_wider()
β ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ² Π΄Π°ΡΠ° ΡΡΠ΅ΠΉΠΌΠ° Π·Π° ΡΡΡΡ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΡΡΠΎΠΊ.
Π’Π°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΊ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎΠΌΡ Π²ΠΈΠ΄Ρ, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΡΡΠΎΡ ΠΏΡΠΈΡΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ²ΠΎΠ΄Π½ΡΡ ΡΠ°Π±Π»ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π² ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΡ , ΠΈΠ»ΠΈ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ ΠΊΠ°ΠΊΠΈΠΌΠΈ Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ pivot_longer()
ΠΈ pivot_wider()
ΡΠ²Π»ΡΡΡΡΡ ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΡΠΌΠΈ, ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ΅ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Ρ.Π΅: df %>% pivot_longer(spec = spec) %>% pivot_wider(spec = spec)
ΠΈ df %>% pivot_wider(spec = spec) %>% pivot_longer(spec = spec)
Π²Π΅ΡΠ½ΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ df.
ΠΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΊ ΡΠΈΡΠΎΠΊΠΎΠΌΡ ΡΠΎΡΠΌΠ°ΡΡ
ΠΠ»Ρ Π΄Π΅ΠΌΠΎΡΡΡΠ°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ pivot_wider()
ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ
fish_encounters, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ
ΡΠ°Π½ΠΈΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡΠ°Π½ΡΠΈΠΈ ΡΠΈΠΊΡΠΈΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠ± ΠΏΠΎ ΡΠ΅ΠΊΠ΅.
#> # A tibble: 114 x 3
#> fish station seen
#> <fct> <fct> <int>
#> 1 4842 Release 1
#> 2 4842 I80_1 1
#> 3 4842 Lisbon 1
#> 4 4842 Rstr 1
#> 5 4842 Base_TD 1
#> 6 4842 BCE 1
#> 7 4842 BCW 1
#> 8 4842 BCE2 1
#> 9 4842 BCW2 1
#> 10 4842 MAE 1
#> # β¦ with 104 more rows
Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π², ΡΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° Π±ΡΠ΄Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΈ ΡΠ΄ΠΎΠ±Π½Π° Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π΅ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ°Π½ΡΠΈΠΈ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΡΡΠΎΠ»Π±ΡΠ΅.
fish_encounters %>% pivot_wider(names_from = station, values_from = seen)
fish_encounters %>% pivot_wider(names_from = station, values_from = seen)
#> # A tibble: 19 x 12
#> fish Release I80_1 Lisbon Rstr Base_TD BCE BCW BCE2 BCW2 MAE
#> <fct> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
#> 1 4842 1 1 1 1 1 1 1 1 1 1
#> 2 4843 1 1 1 1 1 1 1 1 1 1
#> 3 4844 1 1 1 1 1 1 1 1 1 1
#> 4 4845 1 1 1 1 1 NA NA NA NA NA
#> 5 4847 1 1 1 NA NA NA NA NA NA NA
#> 6 4848 1 1 1 1 NA NA NA NA NA NA
#> 7 4849 1 1 NA NA NA NA NA NA NA NA
#> 8 4850 1 1 NA 1 1 1 1 NA NA NA
#> 9 4851 1 1 NA NA NA NA NA NA NA NA
#> 10 4854 1 1 NA NA NA NA NA NA NA NA
#> # β¦ with 9 more rows, and 1 more variable: MAW <int>
ΠΡΠΎΡ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΡΠ±Π° Π±ΡΠ»Π° ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½Π° ΡΡΠ°Π½ΡΠΈΠ΅ΠΉ, Ρ.Π΅. Π΅ΡΠ»ΠΈ ΠΊΠ°ΠΊΠ°Ρ Π»ΠΈΠ±ΠΎ ΡΡΠ±Π° Π½Π΅ Π±ΡΠ»Π° Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠ°ΠΊΠΎΠΉ ΡΠΎ ΡΡΠ°Π½ΡΠΈΠ΅ΠΉ, ΡΠΎ ΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π±ΡΠ΄ΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ NA.
ΠΠ΄Π½Π°ΠΊΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΡΠ±Π° Π½Π΅ Π±ΡΠ»Π° Π·Π°ΠΌΠ΅ΡΠ΅Π½Π°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ values_fill Π² ΡΡΠ½ΠΊΡΠΈΠΈ pivot_wider()
ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠΈ ΠΏΡΠΎΠΏΡΡΠ΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½ΡΠ»ΡΠΌΠΈ:
fish_encounters %>% pivot_wider(
names_from = station,
values_from = seen,
values_fill = list(seen = 0)
)
#> # A tibble: 19 x 12
#> fish Release I80_1 Lisbon Rstr Base_TD BCE BCW BCE2 BCW2 MAE
#> <fct> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
#> 1 4842 1 1 1 1 1 1 1 1 1 1
#> 2 4843 1 1 1 1 1 1 1 1 1 1
#> 3 4844 1 1 1 1 1 1 1 1 1 1
#> 4 4845 1 1 1 1 1 0 0 0 0 0
#> 5 4847 1 1 1 0 0 0 0 0 0 0
#> 6 4848 1 1 1 1 0 0 0 0 0 0
#> 7 4849 1 1 0 0 0 0 0 0 0 0
#> 8 4850 1 1 0 1 1 1 1 0 0 0
#> 9 4851 1 1 0 0 0 0 0 0 0 0
#> 10 4854 1 1 0 0 0 0 0 0 0 0
#> # β¦ with 9 more rows, and 1 more variable: MAW <int>
ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΡΡΠΎΠ»Π±ΡΠ° ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ°Π±Π»ΠΈΡΠ°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°, ΡΡΡΠ°Π½Ρ ΠΈ Π³ΠΎΠ΄Π°. ΠΠ»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ³ΠΎ Π΄Π°ΡΠ° ΡΡΠ΅ΠΉΠΌΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
df <- expand_grid(
product = c("A", "B"),
country = c("AI", "EI"),
year = 2000:2014
) %>%
filter((product == "A" & country == "AI") | product == "B") %>%
mutate(value = rnorm(nrow(.)))
#> # A tibble: 45 x 4
#> product country year value
#> <chr> <chr> <int> <dbl>
#> 1 A AI 2000 -2.05
#> 2 A AI 2001 -0.676
#> 3 A AI 2002 1.60
#> 4 A AI 2003 -0.353
#> 5 A AI 2004 -0.00530
#> 6 A AI 2005 0.442
#> 7 A AI 2006 -0.610
#> 8 A AI 2007 -2.77
#> 9 A AI 2008 0.899
#> 10 A AI 2009 -0.106
#> # β¦ with 35 more rows
ΠΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° ΡΠ°ΡΡΠΈΡΠΈΡΡ Π΄Π°ΡΠ° ΡΡΠ΅ΠΉΠΌ ΡΠ°ΠΊ, ΡΡΠΎ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΡΡΠΎΠ»Π±Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π» Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΠΈ ΡΡΡΠ°Π½Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² Π°ΡΠ³ΡΠΌΠ΅Π½Ρ names_from Π²Π΅ΠΊΡΠΎΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡΡ ΠΏΠΎΠ»Π΅ΠΉ.
df %>% pivot_wider(names_from = c(product, country),
values_from = "value")
#> # A tibble: 15 x 4
#> year A_AI B_AI B_EI
#> <int> <dbl> <dbl> <dbl>
#> 1 2000 -2.05 0.607 1.20
#> 2 2001 -0.676 1.65 -0.114
#> 3 2002 1.60 -0.0245 0.501
#> 4 2003 -0.353 1.30 -0.459
#> 5 2004 -0.00530 0.921 -0.0589
#> 6 2005 0.442 -1.55 0.594
#> 7 2006 -0.610 0.380 -1.28
#> 8 2007 -2.77 0.830 0.637
#> 9 2008 0.899 0.0175 -1.30
#> 10 2009 -0.106 -0.195 1.03
#> # β¦ with 5 more rows
ΠΡ ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ pivot_wider()
. ΠΠΎ ΠΏΡΠΈ ΠΏΠΎΠ΄Π°ΡΠ΅ Π² pivot_wider()
ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠ΅ pivot_longer()
: ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΡΠΎΠ»Π±ΡΡ, ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π² .name, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· .value ΠΈ Π΄ΡΡΠ³ΠΈΡ
ΡΡΠΎΠ»Π±ΡΠΎΠ².
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΡΡΠ°Π½Ρ ΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΠΈΠΌΠ΅Π»Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΡΠΎΠ»Π±Π΅Ρ, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ Π² Π΄Π°Π½Π½ΡΡ :
spec <- df %>%
expand(product, country, .value = "value") %>%
unite(".name", product, country, remove = FALSE)
#> # A tibble: 4 x 4
#> .name product country .value
#> <chr> <chr> <chr> <chr>
#> 1 A_AI A AI value
#> 2 A_EI A EI value
#> 3 B_AI B AI value
#> 4 B_EI B EI value
df %>% pivot_wider(spec = spec) %>% head()
#> # A tibble: 6 x 5
#> year A_AI A_EI B_AI B_EI
#> <int> <dbl> <dbl> <dbl> <dbl>
#> 1 2000 -2.05 NA 0.607 1.20
#> 2 2001 -0.676 NA 1.65 -0.114
#> 3 2002 1.60 NA -0.0245 0.501
#> 4 2003 -0.353 NA 1.30 -0.459
#> 5 2004 -0.00530 NA 0.921 -0.0589
#> 6 2005 0.442 NA -1.55 0.594
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠ΅ΠΉ tidyr
ΠΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΊ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎΠΌΡ Π²ΠΈΠ΄Ρ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠΈ Π΄ΠΎΡ ΠΎΠ΄Π° ΠΈ Π°ΡΠ΅Π½Π΄Π½ΠΎΠΉ ΠΏΠ»Π°ΡΡ Π² Π‘Π¨Π
ΠΠ°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ us_rent_income ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΠ΅Π΄Π½Π΅ΠΌ Π΄ΠΎΡ ΠΎΠ΄Π΅ ΠΈ Π°ΡΠ΅Π½Π΄Π½ΠΎΠΉ ΠΏΠ»Π°ΡΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ°ΡΠ° Π² Π‘Π¨Π Π·Π° 2017 Π³ΠΎΠ΄ (Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅ tidycensus).
us_rent_income
#> # A tibble: 104 x 5
#> GEOID NAME variable estimate moe
#> <chr> <chr> <chr> <dbl> <dbl>
#> 1 01 Alabama income 24476 136
#> 2 01 Alabama rent 747 3
#> 3 02 Alaska income 32940 508
#> 4 02 Alaska rent 1200 13
#> 5 04 Arizona income 27517 148
#> 6 04 Arizona rent 972 4
#> 7 05 Arkansas income 23789 165
#> 8 05 Arkansas rent 709 5
#> 9 06 California income 29454 109
#> 10 06 California rent 1358 3
#> # β¦ with 94 more rows
Π ΡΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Ρ ΡΠ°Π½ΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² Π΄Π°ΡΠ°ΡΠ΅ΡΠ΅ us_rent_income ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½ΠΈΠΌΠΈ ΠΊΡΠ°ΠΉΠ½Π΅ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ ΡΠΎ ΡΡΠΎΠ»Π±ΡΠ°ΠΌΠΈ: rent, rent_moe, come, income_moe. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠΎΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Π½ΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ estimate/moe, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠΌΡ ΡΡΠΎΠ»Π±ΡΠ°.
spec <- us_rent_income %>%
expand(variable, .value = c("estimate", "moe")) %>%
mutate(
.name = paste0(variable, ifelse(.value == "moe", "_moe", ""))
)
#> # A tibble: 4 x 3
#> variable .value .name
#> <chr> <chr> <chr>
#> 1 income estimate income
#> 2 income moe income_moe
#> 3 rent estimate rent
#> 4 rent moe rent_moe
ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ pivot_wider()
Π΄Π°Π΅Ρ Π½Π°ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΈΡΠ΅ΠΌ:
us_rent_income %>% pivot_wider(spec = spec)
#> # A tibble: 52 x 6
#> GEOID NAME income income_moe rent rent_moe
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 01 Alabama 24476 136 747 3
#> 2 02 Alaska 32940 508 1200 13
#> 3 04 Arizona 27517 148 972 4
#> 4 05 Arkansas 23789 165 709 5
#> 5 06 California 29454 109 1358 3
#> 6 08 Colorado 32401 109 1125 5
#> 7 09 Connecticut 35326 195 1123 5
#> 8 10 Delaware 31560 247 1076 10
#> 9 11 District of Columbia 43198 681 1424 17
#> 10 12 Florida 25952 70 1077 3
#> # β¦ with 42 more rows
ΠΡΠ΅ΠΌΠΈΡΠ½ΡΠΉ Π±Π°Π½ΠΊ
ΠΠ½ΠΎΠ³Π΄Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ
Π² Π½ΡΠΆΠ½ΡΡ ΡΠΎΡΠΌΡ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ°Π³ΠΎΠ².
ΠΠ°ΡΠ°ΡΠ΅Ρ world_bank_pop ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π°Π½Π½ΡΠ΅ Π²ΡΠ΅ΠΌΠΈΡΠ½ΠΎΠ³ΠΎ Π±Π°Π½ΠΊΠ° ΠΎ Π½Π°ΡΠ΅Π»Π΅Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠ°Π½Ρ Π² ΠΏΠ΅ΡΠΈΠΎΠ΄ Ρ 2000 ΠΏΠΎ 2018 Π³ΠΎΠ΄.
#> # A tibble: 1,056 x 20
#> country indicator `2000` `2001` `2002` `2003` `2004` `2005` `2006`
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 ABW SP.URB.T⦠4.24e4 4.30e4 4.37e4 4.42e4 4.47e+4 4.49e+4 4.49e+4
#> 2 ABW SP.URB.G⦠1.18e0 1.41e0 1.43e0 1.31e0 9.51e-1 4.91e-1 -1.78e-2
#> 3 ABW SP.POP.T⦠9.09e4 9.29e4 9.50e4 9.70e4 9.87e+4 1.00e+5 1.01e+5
#> 4 ABW SP.POP.G⦠2.06e0 2.23e0 2.23e0 2.11e0 1.76e+0 1.30e+0 7.98e-1
#> 5 AFG SP.URB.T⦠4.44e6 4.65e6 4.89e6 5.16e6 5.43e+6 5.69e+6 5.93e+6
#> 6 AFG SP.URB.G⦠3.91e0 4.66e0 5.13e0 5.23e0 5.12e+0 4.77e+0 4.12e+0
#> 7 AFG SP.POP.T⦠2.01e7 2.10e7 2.20e7 2.31e7 2.41e+7 2.51e+7 2.59e+7
#> 8 AFG SP.POP.G⦠3.49e0 4.25e0 4.72e0 4.82e0 4.47e+0 3.87e+0 3.23e+0
#> 9 AGO SP.URB.T⦠8.23e6 8.71e6 9.22e6 9.77e6 1.03e+7 1.09e+7 1.15e+7
#> 10 AGO SP.URB.G⦠5.44e0 5.59e0 5.70e0 5.76e0 5.75e+0 5.69e+0 4.92e+0
#> # β¦ with 1,046 more rows, and 11 more variables: `2007` <dbl>,
#> # `2008` <dbl>, `2009` <dbl>, `2010` <dbl>, `2011` <dbl>, `2012` <dbl>,
#> # `2013` <dbl>, `2014` <dbl>, `2015` <dbl>, `2016` <dbl>, `2017` <dbl>
ΠΠ°ΡΠ° ΡΠ΅Π»Ρ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ , Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΡΡΠΎΠ»Π±ΡΠ΅. ΠΠΎΠΊΠ° Π½Π΅ΡΡΠ½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°Π³ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ, Π½ΠΎ ΠΌΡ Π½Π°ΡΠ½ΡΠΌ Ρ ΡΠ°ΠΌΠΎΠΉ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ: Π³ΠΎΠ΄ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΡΡΠΎΠ»Π±ΡΠ°ΠΌ.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π±Ρ ΡΡΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ pivot_longer()
.
pop2 <- world_bank_pop %>%
pivot_longer(`2000`:`2017`, names_to = "year")
#> # A tibble: 19,008 x 4
#> country indicator year value
#> <chr> <chr> <chr> <dbl>
#> 1 ABW SP.URB.TOTL 2000 42444
#> 2 ABW SP.URB.TOTL 2001 43048
#> 3 ABW SP.URB.TOTL 2002 43670
#> 4 ABW SP.URB.TOTL 2003 44246
#> 5 ABW SP.URB.TOTL 2004 44669
#> 6 ABW SP.URB.TOTL 2005 44889
#> 7 ABW SP.URB.TOTL 2006 44881
#> 8 ABW SP.URB.TOTL 2007 44686
#> 9 ABW SP.URB.TOTL 2008 44375
#> 10 ABW SP.URB.TOTL 2009 44052
#> # β¦ with 18,998 more rows
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³ β ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ indicator.
pop2 %>% count(indicator)
#> # A tibble: 4 x 2
#> indicator n
#> <chr> <int>
#> 1 SP.POP.GROW 4752
#> 2 SP.POP.TOTL 4752
#> 3 SP.URB.GROW 4752
#> 4 SP.URB.TOTL 4752
ΠΠ΄Π΅ SP.POP.GROW β ΠΏΡΠΈΡΠΎΡΡ Π½Π°ΡΠ΅Π»Π΅Π½ΠΈΡ, SP.POP.TOTL β ΠΎΠ±ΡΠ°Ρ ΡΠΈΡΠ»Π΅Π½Π½ΠΎΡΡΡ Π½Π°ΡΠ΅Π»Π΅Π½ΠΈΡ, Π° SP.URB. * ΡΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π³ΠΎΡΠΎΠ΄ΡΠΊΠΎΠΉ ΠΌΠ΅ΡΡΠ½ΠΎΡΡΠΈ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π° Π΄Π²Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅: area β ΠΌΠ΅ΡΡΠ½ΠΎΡΡΡ (total ΠΈΠ»ΠΈ urban) ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ (population ΠΈΠ»ΠΈ growth):
pop3 <- pop2 %>%
separate(indicator, c(NA, "area", "variable"))
#> # A tibble: 19,008 x 5
#> country area variable year value
#> <chr> <chr> <chr> <chr> <dbl>
#> 1 ABW URB TOTL 2000 42444
#> 2 ABW URB TOTL 2001 43048
#> 3 ABW URB TOTL 2002 43670
#> 4 ABW URB TOTL 2003 44246
#> 5 ABW URB TOTL 2004 44669
#> 6 ABW URB TOTL 2005 44889
#> 7 ABW URB TOTL 2006 44881
#> 8 ABW URB TOTL 2007 44686
#> 9 ABW URB TOTL 2008 44375
#> 10 ABW URB TOTL 2009 44052
#> # β¦ with 18,998 more rows
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΌ ΠΎΡΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ variable Π½Π° Π΄Π²Π° ΡΡΠΎΠ»Π±ΡΠ°:
pop3 %>%
pivot_wider(names_from = variable, values_from = value)
#> # A tibble: 9,504 x 5
#> country area year TOTL GROW
#> <chr> <chr> <chr> <dbl> <dbl>
#> 1 ABW URB 2000 42444 1.18
#> 2 ABW URB 2001 43048 1.41
#> 3 ABW URB 2002 43670 1.43
#> 4 ABW URB 2003 44246 1.31
#> 5 ABW URB 2004 44669 0.951
#> 6 ABW URB 2005 44889 0.491
#> 7 ABW URB 2006 44881 -0.0178
#> 8 ABW URB 2007 44686 -0.435
#> 9 ABW URB 2008 44375 -0.698
#> 10 ABW URB 2009 44052 -0.731
#> # β¦ with 9,494 more rows
Π‘ΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΎΠ²
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΈ Π²ΡΡΠ°Π²ΠΈΠ»ΠΈ Ρ Π²Π΅Π±-ΡΠ°ΠΉΡΠ°:
contacts <- tribble(
~field, ~value,
"name", "Jiena McLellan",
"company", "Toyota",
"name", "John Smith",
"company", "google",
"email", "[email protected]",
"name", "Huxley Ratcliffe"
)
ΠΡΠΈΠ²Π΅ΡΡΠΈ ΡΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ ΠΊ ΡΠ°Π±Π»ΠΈΡΠ½ΠΎΠΌΡ Π²ΠΈΠ΄Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π»Π°, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΠΊΠ°ΠΊΠΎΠΌΡ ΠΊΠΎΠ½ΡΠ°ΠΊΡΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎ, Π·Π°ΠΌΠ΅ΡΠΈΠ², ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Π½ΠΎΠ²ΠΎΠΌΡ ΠΊΠΎΠ½ΡΠ°ΠΊΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΠΈΠΌΠ΅Π½ΠΈ ("name"), ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π² ΡΡΠΎΠ»Π±ΡΠ΅ field Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ βnameβ:
contacts <- contacts %>%
mutate(
person_id = cumsum(field == "name")
)
contacts
#> # A tibble: 6 x 3
#> field value person_id
#> <chr> <chr> <int>
#> 1 name Jiena McLellan 1
#> 2 company Toyota 1
#> 3 name John Smith 2
#> 4 company google 2
#> 5 email [email protected] 2
#> 6 name Huxley Ratcliffe 3
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠ°, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ²Π΅ΡΠ½ΡΡΡ ΠΏΠΎΠ»Π΅ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠΎΠ»Π±ΡΡ:
contacts %>%
pivot_wider(names_from = field, values_from = value)
#> # A tibble: 3 x 4
#> person_id name company email
#> <int> <chr> <chr> <chr>
#> 1 1 Jiena McLellan Toyota <NA>
#> 2 2 John Smith google [email protected]
#> 3 3 Huxley Ratcliffe <NA> <NA>
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΈΡΠ½ΠΎ ΠΌΠΎΡ ΠΌΠ½Π΅Π½ΠΈΠ΅, ΡΡΠΎ Π½ΠΎΠ²Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ tidyr Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½Π°, ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠ΅Π²ΠΎΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Ρ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ spread()
ΠΈ gather()
. ΠΠ°Π΄Π΅ΡΡΡ ΡΡΠ° ΡΡΠ°ΡΡΡ ΠΏΠΎΠΌΠΎΠ³Π»Π° Π²Π°ΠΌ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ pivot_longer()
ΠΈ pivot_wider()
.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com