我正在阅读一个csv文件,每周都会通过视频点播的电影观看窗口购买客户。该文件由给定电影的几列组成,包括标题,价格,周数和该周内发生的购买数量。有时,特定电影可能在一行中以多行(同一周)购买。
我正在尝试操作数据,以便如果给定电影的同一周有多行行,我想用一行替换它一周,并且购买量增加。
我最近几周刚刚开始关注R并且在尝试中失败了。请帮忙!!!
答案 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")