I realise I'm in the minority, but I personally like using the right assignment operator (->) with pipes because it maintains the flow of the code when reading.
mtcars |> filter(am == 1) |> select(mpg, gear) -> df
mtcars |> filter(am == 1) |> select(mpg, gear) -> df
I don’t see every using a read and replace pipe operator over the right assignment approach.