2015-06-19 55 views
0

我试图分析AB测试网站的数据。 我的参考点是基于experimentName =实验1(对照版)[R相加一行包含所有行

experimentName UniquePageView UniqueFrequency NonUniqueFrequency 
1 Experiment 1   459    294    359 
2 Experiment 2   440    286    338 
3 Experiment 3   428    273    348 

我需要做的是和每一个UniquePageView,UniqueFrequency和NonUniqueFrequency行时experimentName =实验1

例如

UniquePageView WHERE experimentName = 'Experiment 1 ' + UniquePageView WHERE experimentName = 'Experiment 2 ', 
UniquePageView WHERE experimentName = 'Experiment 1 ' + UniquePageView WHERE experimentName = 'Experiment 3 ' 

等等等等(我能有实验#的unlimted号) 然后做UniqueFrequency和NonUniqueFrequency相同的(我可以列无限数量的为好)

结果预计:

experimentName UniquePageView UniqueFrequency NonUniqueFrequency Conversion Rate Pooled UniquePageView Conversion Rate Pooled UniqueFrequency Conversion Rate Pooled NonUniqueFrequency 
1 Experiment 1 459 294 359 918 588 718 
2 Experiment 2 440 286 338 899 580 697 
3 Experiment 3 428 273 348 887 567 707 

这里是它背后的数学:

experimentName UniquePageView UniqueFrequency NonUniqueFrequency  Conversion Rate Pooled UniquePageView Conversion Rate Pooled UniqueFrequency Conversion Rate Pooled NonUniqueFrequency 
1 Experiment 1 459 294 359 459 + 459 294 + 294 359 + 359 
2 Experiment 2 440 286 338 459 + 440 294 + 286 359 + 338 
3 Experiment 3 428 273 348 459 + 428 294 + 273 359 + 348 

回答

2

在基R,则可以在通过柱结合(与cbind)一条线的初始数据帧到初始数据帧加上版本这仅仅是个“实验1”行的副本)执行此操作。

cbind(dat, dat[,-1] + dat[rep(which(dat$experimentName == "Experiment 1"), nrow(dat)), -1]) 
# experimentName UniquePageView UniqueFrequency NonUniqueFrequency UniquePageView UniqueFrequency 
# 1 Experiment 1   459    294    359   918    588 
# 2 Experiment 2   440    286    338   899    580 
# 3 Experiment 3   428    273    348   887    567 
# NonUniqueFrequency 
# 1    718 
# 2    697 
# 3    707 

要在年底更新的列名(假设你存储在res得到的数据帧),你可以使用:

names(res)[4:6] <- c("CombinedPageView", "CombinedUniqueFrequency", "CombinedNonUniqueFrequency") 
0

你知道如何使用dplyr吗?如果你是R的新手,这是一个很好的教训。 Dplyr包括功能filtersummarise,这些都是你需要做的这个问题 - 很简单!

首先,把你的数据帧

df 

然后,过滤器,只有你想要的数据,在这种情况下,当experimentName =实验1

df 
df <- filter(df, experimentName == "Experiment 1") 

现在,总结发现的总和UniquePageView,UniqueFrequency和NonUniqueFrequency

df 
df <- filter(df, experimentName == "Experiment 1") 
summarise(df, SumUniquePageView = sum(UniquePageView), 
       SumUniqueFrequency = sum(UniqueFrequency), 
       SumNonUniqueFrequency = sum(NonUniqueFrequency)) 

这将返回一个小的t能够找到你正在寻找的答案。对于稍微更先进(但更简单)的方法,可以使用软件包magrittr中的管道操作员%>%。该代码借用前面的语句对象,并将其作为该诉讼声明中的第一个参数,如下所示:

df %>% filter(experimentName == "Experiment 1") %>% summarise(SumUniquePageView = sum(UniquePageView), etc) 

如果您还没有这些软件包,你可以用install.packages("dpyr")得到他们,library(dplyr)

+0

感谢这个,但是我在看suming了第1行与其他行一样。为了实现你所做的,我通常使用SQLDF并运行一个查询 - 我想最终的结果是一样的。 –

相关问题