我想找出每个季度增长最快的五个话题。我在R中有一个dataframe (将称为df),它有三列--四分之一数(df$QNum)、主题(df$ topic )和该主题的记录数(df$Total_Hits)。
下面是我的dataframe外观的一个示例:
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_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,但他们并没有完全做我所需要的。
编辑:使用ddply或聚合,This question似乎也很有用。
提前谢谢你!
发布于 2013-09-06 04:04:08
我确信有一种更干净的方法可以做到这一点,但是这里有一个丑陋的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.5833333https://stackoverflow.com/questions/18648970
复制相似问题