2015-06-19 65 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並運行一個查詢 - 我想最終的結果是一樣的。 –

相關問題