R将第一行与所有行相加

R将第一行与所有行相加,r,R,我试图分析AB测试的网站数据。 我的参考点基于实验名称=实验1(控制版本) 当实验名称=实验1时,我需要对每个UniquePageView、UniqueFrequency和ununiquefrequency行求和 df df <- filter(df, experimentName == "Experiment 1") e、 g 依此类推(我可以有一个无限制数量的实验) 然后对UniqueFrequency和ununiquefrequency执行相同的操作(我也可以有无限数量的列) 预期

我试图分析AB测试的网站数据。 我的参考点基于实验名称=实验1(控制版本)

当实验名称=实验1时,我需要对每个UniquePageView、UniqueFrequency和ununiquefrequency行求和

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

依此类推(我可以有一个无限制数量的实验) 然后对UniqueFrequency和ununiquefrequency执行相同的操作(我也可以有无限数量的列)

预期结果:

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

你知道如何使用dplyr吗?如果你是新手,这是一个很好的教训。Dplyr包括函数
过滤器
摘要
,这是解决此问题所需的全部功能-非常简单

首先,获取数据帧

df
然后,仅过滤到所需的数据,在本例中,当experimentName=experiment1时

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

如果您还没有这些软件包,您可以使用
install.packages(“dpyr”)
library(dplyr)
在base R中获得它们,您可以通过一行一列绑定(使用
cbind
)将初始数据帧绑定到初始数据帧,再加上与“实验1”行重复的版本

要更新末尾的列名(假设将结果数据帧存储在
res
),可以使用:

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

names(res)[4:6]感谢您的帮助,不过我也在考虑将第1行和其他行相加。为了实现您所做的,我通常使用SQLDF并运行一个查询-我想最终结果是一样的。
df
df <- filter(df, experimentName == "Experiment 1")
summarise(df, SumUniquePageView = sum(UniquePageView),
              SumUniqueFrequency = sum(UniqueFrequency),
              SumNonUniqueFrequency = sum(NonUniqueFrequency))
df %>% filter(experimentName == "Experiment 1") %>% summarise(SumUniquePageView = sum(UniquePageView), etc)
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
names(res)[4:6] <- c("CombinedPageView", "CombinedUniqueFrequency", "CombinedNonUniqueFrequency")