Мы можем использовать data.table
, так как это будет более эффективно и будет работать для больших наборов данных
library(data.table)
dcast(setDT(df1), Order ~ Product, length)
# Order Lemonade Milk OJ Soda Water
#1: 1 0 1 0 0 1
#2: 2 0 0 1 0 0
#3: 3 1 0 0 1 0
Также, если есть дубликаты, измените length
с логическим выражением
dcast(setDT(df1), Order ~ Product, function(x) as.integer(length(x) > 0))
Для небольших наборов данных table
из base R
также подходит
+(table(df1) > 0)
данные
df1 <- structure(list(Order = c(1L, 1L, 2L, 3L, 3L), Product = c("Milk",
"Water", "OJ", "Soda", "Lemonade")), class = "data.frame",
row.names = c(NA, -5L))