2015-11-27 2 views
0

Я сделал редактирование после того, как понял, что моего кода недостаточно для объяснения проблемных приложений.Включить третью переменную в таблицу

У меня есть кадр данных, в том числе четыре колонки

purchaseId <- c("abc","xyz","def","ghi") 
product <- c("a","b","c","a") 
quantity <- c(1,2,2,1) 
revenue <- c(500,1000,300,500) 
t <- data.frame(purchaseId,product, quantity, revenue) 

table(t$product,t$quantity) 

Выполнение этого запроса

table(t$product,t$quantity) 

возвращает таблицу с указанием, сколько раз происходит каждая комбинация

1 2 
    a 2 0 
    b 0 1 
    c 0 1 

Что я хотел бы чтобы сделать это как произведение, так и количество в виде строк и столбцов (как показано выше), но с повторением место в качестве фактического значения.

Результат должен выглядеть следующим образом:

1 2 
a 1000 0 
b 0 1000 
c 300 0 

Это позволило бы мне создать таблицу, в которой я мог бы экспортировать в CSV-файл.

Может ли кто-нибудь помочь мне дальше?

редактировать - код предлагаемых ниже выдает следующее сообщение об ошибке о фактическом наборе данных 140K строк:

Error: dims [product 21525] do not match the length of object [147805] 

Другие идеи?

Конечно, приведенный выше примерный пример представляет собой упрощенную версию фактических данных, которые я использую, но идея такая же.

Благодарим вас, С уважением.

+1

'таблица (товар, количество) * выручка'? – etienne

+1

@ Решение etienne очень круто, также то, что будет работать, это функция recast из 'data.table' или' reshape2'. 'reshape2 :: recast (t, product ~ quantity, measure.var =" доход ", fill = 0)' – Chris

ответ

0
table(t$product,t$quantity)*t$revenue 
+1

можно учесть ошибку? –

+0

Работает без проблем на моей машине. Однако вы можете использовать другое имя переменной, поскольку 't' является базовой функцией в R и с переменными, названными так же, как и функции, является плохой практикой. – Heroka

+0

@Heroka На самом деле это не так. –

0

Использование library(reshape2) или library(data.table)

dcast(t,product ~ quantity, value.var = "revenue", fun = sum) 

это довольно простой синтаксис:

  • Установите кадр данных вы переделывая
  • Установите "формулу" результирующего кадра данных , LHS ~ - это сводчатый стержень, RHS - по столбцу.
  • value.var говорит вам, какой столбец мы хотим поместить в клетках, и с помощью fun мы хотим объединить с sum функции

Как вы упомянули в своем комментарии знакомство с таблицами Excel Pivot, его стоит отметить, что dcast является довольно полной заменой, с дополнительной гибкостью.

Смежные вопросы