Dplyr: Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ‚ΠΈΡ…ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ†Π΅Π»Ρ‹ΠΌΠΈ ΠΈ числовыми значСниями Π² if_else () ΠΈ case_when ()

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 18 янв. 2017  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: tidyverse/dplyr

Π₯отя я Ρ†Π΅Π½ΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ², Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ if_else() ΠΈ case_when() ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ опасныС ошибки, я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ отсутствиС автоматичСского прСобразования ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ†Π΅Π»Ρ‹ΠΌΠΈ ΠΈ числовыми значСниями довольно Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎ.

НапримСр, Π² ΠΎΠ΄Π½ΠΎΠΌ опросС я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ (здСсь y ), Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½ΡƒΡŽ ΠΊΠ°ΠΊ количСство часов Π² дСнь Π² нСдСлю. Π•Π΄ΠΈΠ½ΠΈΡ†Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ хранится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ x . Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ количСство часов Π² дСнь, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ if_else для выполнСния дСлСния, ΠΊΠΎΠ³Π΄Π° это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. К соТалСнию, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° y ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ integer , Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто Π² Ρ„Π°ΠΉΠ»Π°Ρ… dBase, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ read.dbf .

library(dplyr)
df <- data.frame(x=c("Week", "Day"), y=c(1L, 2L))
mutate(df, z = if_else(x == "Week", y/7, y))

# Result:
Error in mutate_impl(.data, dots) : 
  `false` has type 'integer' not 'double'

(На самом Π΄Π΅Π»Π΅ условиС Π±ΠΎΠ»Π΅Π΅ слоТноС, поэтому я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ case_when вмСсто Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ if_else .)

МоТно Π»ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ цСлочислСнных столбцов Π² числовыС? Π’ этом случаС Π½Π΅Ρ‚ риска ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Π²Π΅Ρ€Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Π’ Ρ†Π΅Π»ΠΎΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ numeric ΠΈ integer Π² R довольно скрыта, поэтому эта ошибка скорСС всСго сбиваСт с Ρ‚ΠΎΠ»ΠΊΡƒ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. МнС ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ…ΠΎ, Ρ‡Ρ‚ΠΎ приходится ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ это Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ для выполнСния Ρ‚Π°ΠΊΠΎΠΉ простой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π”Π°, это извСстная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, которая (со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ) Π±ΡƒΠ΄Π΅Ρ‚ исправлСна ​​в vctrs.

ВсС 3 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ сСйчас ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ as.numeric(y) вмСсто y ?

@hadley : ΠœΡ‹ слишком строги, Π½Π΅ прСобразуя Ρ†Π΅Π»ΠΎΠ΅ число Π² число автоматичСски Π² if_else() ΠΈ case_when() ?

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ сСйчас ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ as.numeric (y) вмСсто y?

Π”Π°, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΎ это Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎ ΠΈ сбиваСт с Ρ‚ΠΎΠ»ΠΊΡƒ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ².

Π”Π°, это извСстная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, которая (со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ) Π±ΡƒΠ΄Π΅Ρ‚ исправлСна ​​в vctrs.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ