首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:如何计算数据中包含多个变量的“增长”列

R:如何计算数据中包含多个变量的“增长”列
EN

Stack Overflow用户
提问于 2013-09-06 02:32:48
回答 1查看 1.9K关注 0票数 1

我想找出每个季度增长最快的五个话题。我在R中有一个dataframe (将称为df),它有三列--四分之一数(df$QNum)、主题(df$ topic )和该主题的记录数(df$Total_Hits)。

下面是我的dataframe外观的一个示例:

代码语言:javascript
复制
    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)

我想它看起来会像下面这样,但无法完全弄清楚:

代码语言:javascript
复制
df$QonQGrowth <- (df$Total_Hits / ([a lookup of Total_Hits for df$Topic and (df$Qnum-1)?]))-1

数据集相当大,所以不可能每个季度都有记录。

类似的问题,herehere,但他们并没有完全做我所需要的。

编辑:使用ddply或聚合,This question似乎也很有用。

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-06 04:04:08

我确信有一种更干净的方法可以做到这一点,但是这里有一个丑陋的plyr解决方案:

代码语言:javascript
复制
> #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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18648970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档