Maybe table
could be an alternative:
# some data
df <- data.frame(id = c(1, 1, 2, 2, 2), item = c(1, 5, 2, 4, 5))
# define possible levels of 'item', so that also levels with zero count appear in table
df$item <- factor(df$item, levels = 1:5)
# make table
with(df, table(id, item))
# item
# id 1 2 3 4 5
# 1 1 0 0 0 1
# 2 0 1 0 1 1