目标
如果以下描述难以理解,请查看示例“之前”和“之后”以查看简单示例。
我有易货数据,具有唯一的贸易 ID,以及贸易的两个方面。Side1 和 Side2 是篮子,代表易货交易双方的项目 ID 列表。
我想计算每个项目出现在 TRADES 中的频率。例如,如果项目“001”出现在 3 次交易中,我将计数为 3(忽略该项目在每次交易中出现的次数)。
此外,我想用 plyr ddply 函数来做到这一点。
(如果您对我的动机感兴趣,我处理了数十万笔交易,并且已经在使用 ddply 来计算其他几个汇总统计信息。我想将此添加到我已经使用的 ddply 中,而不是比之后计算它,并将其合并到 ddply 输出中......对不起,如果这很难理解。)
在伪代码方面,我正在处理:
- 合并 Side1 和 Side2 的每一行
- 按行,获取每个项目 id 的 unique() 外观
- 应用表()函数
- 转置和重新标记表中的输出
我的数据结构示例,以及我想要的输出。
数据示例(之前):
df <- data.frame(TradeID = c("01","02","03","04"))
df$Side1 = list(c("001","001","002"),
c("002","002","003"),
c("001","004"),
c("001","002","003","004"))
df$Side2 = list(c("001"),c("007"),c("009"),c())
期望的输出(之后):
df.ItemRelFreq_byTradeID <- data.frame(ItemID = c("001","002","003","004","007","009"),
RelFreq_byTrade = c(3,3,2,2,1,1))
一种没有 ddply 的方法
我已经在下面找到了一种方法来做到这一点。我的问题是我似乎无法让 ddply 为我做这件事。
temp <- table(unlist(sapply(mapply(c,df$Side1,df$Side2), unique)))
df.ItemRelFreq_byTradeID <- data.frame(ItemID = names(temp),
RelFreq_byTrade = temp[])
谢谢你尽你所能的帮助!
柯蒂斯