Quiero crear una versión canalizada del siguiente código con el operador %>%.

main_details <- select(houses, PID, Lot.Area, Bldg.Type:Year.Built,
  Mo.Sold, Yr.Sold, SalePrice)
expensive_houses <- filter(main_details, SalePrice > 150000)
ages_added <- mutate(expensive_houses, OLD_HOUSE = Year.Built < 1960)

Intenté lo siguiente:

main_details <- select(houses, PID, Lot.Area, Bldg.Type:Year.Built,
  Mo.Sold, Yr.Sold, SalePrice) %>%
expensive_houses <- filter(SalePrice > 150000) %>%
ages_added <- mutate(OLD_HOUSE = Year.Built < 1960)

Sin embargo, esto me da un error. ¿Alguien puede explicarme dónde necesito colocar el operador%>% en mi código para hacer una versión canalizada?

0
user13370532 21 abr. 2020 a las 13:28

2 respuestas

La mejor respuesta

El principal beneficio de usar pipe es que no tiene que crear tales objetos intermedios. El lado izquierdo de la tubería es el primer argumento de la función en el lado derecho. Entonces puedes usar:

library(dplyr)

houses %>%
  select(PID, Lot.Area, Bldg.Type:Year.Built, Mo.Sold, Yr.Sold, SalePrice) %>%
  filter(SalePrice > 150000) %>%
  mutate(OLD_HOUSE = Year.Built < 1960)
1
sindri_baldur 21 abr. 2020 a las 10:33

Aquí hay una opción con data.table

library(data.table)
setDT(houses)[SalePrice > 15000, .(PID, Lot.Area, Bldg.Type, 
     Year.Built, Mo.Sold, Yr.Sold, SalePrice)][, OLD_HOUSE := Year.Built < 1960][]
0
akrun 21 abr. 2020 a las 19:48