I find it quite convenient to use duckdb as a backend of dplyr (through dbplyr). All you need to do is to specify a duckdb connection, and read data through duckdb's function. Then you can manipulate df using dplyr. e.g.,
library(duckdb)
library(dplyr)
con <- dbConnect(duckdb())
df = tbl(con, "read_parquet('yourdata.parquet')")
So what can duckplyr do that dbplyr can't?