Переформатировать Dataframe с уникальными значениями строк в виде столбцов - PullRequest
1 голос
/ 08 апреля 2019

У меня есть кадр данных, отформатированный следующим образом:

Order#     Product
1          Milk
1          Water
2          OJ
3          Soda
3          Lemonade

Я хочу переформатировать это так, чтобы в каждом заказе была 1 строка, каждый продукт в виде столбца и двоичный файл, чтобы указать, содержал ли этот заказ продукт в столбце:

Order#     Lemonade     Milk     OJ     Soda     Water
1          0            1        0      0        1
2          0            0        1      0        0
3          1            0        0      1        0

Я считаю, что reshape2 или tidyverse - это пакеты, которые я мог бы использовать, но я не уверен. Буду признателен за любую помощь в том, как это сделать.

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Мы можем использовать 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))
1 голос
/ 08 апреля 2019
df$v<-1
tidyr::spread(df,Product,v,fill=0)

  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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...