我正试图弄清楚每个季度增长最快的五个话题。我在R中有一个数据框(将其称为df),其中包含三列 - 四分之一数字(df $ QNum),主题(df $ Topic)以及该季度的主题记录数(df $ Total_Hits)。
以下是我的数据帧df外观的示例:
Total_Hits Topic QNum
10 Technology 1
86 Video Conferencing 1
14 Video Conferencing 2
10 Technology 3
1 Video Conferencing 1
12 Technology 21
我想在df,df $ QonQGrowth中创建一个新列,对于每条记录,计算上一季度该主题上的点击量增长。我不介意它如何查找df $ QNum = 1但是对于本例中的第三条记录,它会计算: (Total_Hits /(Total_Hits,其中Topic =“视频会议”和QNum = 1)-1)
我认为它看起来像下面这样但是无法弄清楚:
df$QonQGrowth <- (df$Total_Hits / ([a lookup of Total_Hits for df$Topic and (df$Qnum-1)?]))-1
数据集非常大,因此每个季度都不会有每个主题的记录。
类似的问题here和here,但它们并没有完全符合我的需要。
编辑:This question似乎也可能有用,使用ddply或聚合。
提前非常感谢!
答案 0 :(得分:4)
我确信有更简洁的方法可以做到这一点,但这是一个丑陋的plyr
解决方案:
> #make junk data
> set.seed(3)
> dat <- data.frame(total_hits=round(runif(25,0,50)),topic=sample(c("A","B","C","D"),25,T),qnum=round(runif(25,1,6)))
> dat <- dat[row.names(unique(dat[,2:3])),]
> dat
total_hits topic qnum
1 8 D 2
2 40 C 2
3 19 D 5
4 16 C 6
6 30 B 6
7 6 B 3
8 15 A 2
9 29 B 2
11 26 B 5
12 25 D 1
13 27 A 5
18 35 A 4
19 45 C 3
20 14 B 1
23 6 A 6
25 12 D 4
>
> #get you qonqgrowth variable
> library(plyr)
> ddply(dat,.(topic,qnum),summarize,qonqgrowth=ifelse(any(dat$qnum==qnum-1 & dat$topic == topic),total_hits/(dat$total_hits[dat$qnum == qnum-1 & dat$topic == topic]),NA))
topic qnum qonqgrowth
1 A 2 NA
2 A 4 NA
3 A 5 0.7714286
4 A 6 0.2222222
5 B 1 NA
6 B 2 2.0714286
7 B 3 0.2068966
8 B 5 NA
9 B 6 1.1538462
10 C 2 NA
11 C 3 1.1250000
12 C 6 NA
13 D 1 NA
14 D 2 0.3200000
15 D 4 NA
16 D 5 1.5833333