2

我有一个这样的数据框。

> df1
  portfolio       date ticker quantity price
1      port 2010-01-01   AAPL      100    10
2      port 2010-01-01   AAPL      200    10
3      port 2010-01-01   AAPL      400    11

如果df1except的行quantity相同,则添加quantitycommon 行。我的意思是,我需要以下输出

portfolio       date ticker quantity price
1      port 2010-01-01   AAPL      300    10
3      port 2010-01-01   AAPL      400    11

我怎样才能做到这一点?谢谢..

4

2 回答 2

5

干得好... :-)

对于plyr

ddply(df, .(portfolio, date, ticker, price),summarize, quantity=sum(quantity))

对于data.table

dt <- data.table(df)
dt[,list(quantity=sum(quantity)),by=list(portfolio,date,ticker,price)]

可能有更简洁的方式来表达分组变量列表。否则,aggregate解决方案要优雅得多。

于 2013-09-20T10:58:43.983 回答
4

使用aggregate. 假设你data.frame被称为“mydf”:

> aggregate(quantity ~ ., mydf, sum)
  portfolio       date ticker price quantity
1      port 2010-01-01   AAPL    10      300
2      port 2010-01-01   AAPL    11      400

当然,我们现在都应该等待data.tableddply版本来填充答案列表......

于 2013-09-20T10:38:40.743 回答