Как добавить значения определенных переменных столбца, если они появляются в повторяющихся строках с одинаковыми значениями ключа - PullRequest
0 голосов
/ 23 мая 2011

Я читаю CSV-файл с покупками клиентов каждую неделю через окно просмотра фильма на видео по запросу. Файл состоит из нескольких столбцов для данного фильма, включая заголовок, цену, номер недели и количество покупок за эту неделю. Иногда определенный фильм может иметь покупки для данной недели в несколько рядов (для одной и той же недели).

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

Я только начал смотреть на R в последние несколько недель и потерпел неудачу в этой попытке. Пожалуйста, помогите !!!

Ответы [ 3 ]

3 голосов
/ 23 мая 2011

Я думаю, что следовал тому, что вы хотели. Дайте мне знать, если это то, что вы имели в виду.

Сначала составьте некоторые данные:

movies <- data.frame(mov = c("Foo", rep(c("Foo", "Bar", "Baz"),3))
    , price = c(7, rep(c(7, 5, 2),3))
    , wknumb = c(1, rep(1:3, each = 3))
    , buys = sample(10:20, 10, TRUE))

   mov price wknumb buys
1  Foo     7      1   12
2  Foo     7      1   11
3  Bar     5      1   10
4  Baz     2      1   19
5  Foo     7      2   10
6  Bar     5      2   15
7  Baz     2      2   15
8  Foo     7      3   14
9  Bar     5      3   15
10 Baz     2      3   20

У нас есть две записи для фильма "Foo" и недели 1, которые нам нужно свернуть в одну запись. Для этого мы можем использовать пакет plyr:

library(plyr)
ddply(movies, c("mov", "wknumb"), summarize, totbuys = sum(buys))

Возвращает data.frame с 9 строками, по одной на каждый фильм и неделю:

  mov wknumb totbuys
1 Bar      1      10
2 Bar      2      15
3 Bar      3      15
4 Baz      1      19
5 Baz      2      15
6 Baz      3      20
7 Foo      1      23
8 Foo      2      10
9 Foo      3      14
2 голосов
/ 23 мая 2011

Вариация с использованием aggregate из базы R (и набора данных Чейза).

with(movies, aggregate(buys, list(mov = mov, wknumb = wknumb), sum))
0 голосов
/ 23 мая 2011

Многие из них могут быть обработаны sqldf, если вы знакомы с sql.

library(sqldf)
sqldf("select mov, wknumb, sum(buys) as sumBuys from movies group  by wknumb, mov")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...