如果某些列变量出现在具有相同键值的重复行中,如何添加它们的值

时间:2011-05-23 16:18:27

标签: r

我正在阅读一个csv文件,每周都会通过视频点播的电影观看窗口购买客户。该文件由给定电影的几列组成,包括标题,价格,周数和该周内发生的购买数量。有时,特定电影可能在一行中以多行(同一周)购买。

我正在尝试操作数据,以便如果给定电影的同一周有多行行,我想用一行替换它一周,并且购买量增加。

我最近几周刚刚开始关注R并且在尝试中失败了。请帮忙!!!

3 个答案:

答案 0 :(得分:3)

我想我遵循了你想要的。如果这是您的想法,请告诉我。

首先,编制一些数据:

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))

返回一个包含9行的data.frame,每个影片和每周一行:

  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

答案 1 :(得分:2)

使用基础R(和Chase的数据集)中的aggregate的变体。

with(movies, aggregate(buys, list(mov = mov, wknumb = wknumb), sum))

答案 2 :(得分:0)

如果你熟悉sql,那么很多这些都可以由sqldf处理。

library(sqldf)
sqldf("select mov, wknumb, sum(buys) as sumBuys from movies group  by wknumb, mov")