R 根据条件将列除以值

R 根据条件将列除以值,r,R,我想将一列除以一个数字,但该数字将根据相应列的值而变化 主数据帧: ob_name reg_name Sales TVR 1 01-Jan-18 London 73000 0 2 08-Jan-18 London 54000 0 3 15-Jan-18 London 51000 22 4 22-Jan-18 London 50000 22 5 29-Jan-18 London 50000 0 6 05-Feb-18 London 71

我想将一列除以一个数字,但该数字将根据相应列的值而变化

主数据帧:

     ob_name reg_name Sales TVR
1  01-Jan-18   London 73000   0
2  08-Jan-18   London 54000   0
3  15-Jan-18   London 51000  22
4  22-Jan-18   London 50000  22
5  29-Jan-18   London 50000   0
6  05-Feb-18   London 71000   0
7  12-Feb-18   London 71000   0
8  01-Jan-18   Exeter   580   0
9  08-Jan-18   Exeter   760   0
10 15-Jan-18   Exeter   690   0
11 22-Jan-18   Exeter   620  32
12 29-Jan-18   Exeter   640  23
13 05-Feb-18   Exeter   520   0
14 12-Feb-18   Exeter   720   0
柱状物

  reg_name      Sales
1   Exeter   647.1429
2   London 60000.0000
输出(值除以reg_名称平均值)

代码到目前为止

regmean=aggregate(Sales~reg_name,data,mean)
#regmean=tapply(data$Sales,data$reg_name,mean)
i=intersect(regmean$reg_name,data$reg_name)
output<-data.frame(mapply(`/`, data[i,"reg_name"], regmean[i,"reg_name"]))
regmean=聚合(销售~reg_名称、数据、平均值)
#regmean=tapply(数据$Sales,数据$reg\u name,平均值)
i=相交(regmean$reg\u name,data$reg\u name)

输出您可以使用group_by和mutate找到组的平均值,然后定义比率

    data_LE <- read.csv("data_LE.csv", stringsAsFactors = F)

     data_LE%>%
      group_by(reg_name)%>%
      mutate(sal_mean=mean(Sales),TVR_mean=mean(TVR), sal_rt = Sales/sal_mean, TVR_rt= TVR/ TVR_mean)%>%
      select(-Sales, -TVR, - sal_mean, -TVR_mean)
data\u LE%
分组人(注册人姓名)%>%
变异(sal_平均值=平均值(销售),TVR平均值=平均值(TVR),sal_rt=销售/sal_平均值,TVR rt=TVR/TVR平均值)%>%
选择(-Sales,-TVR,-sal_平均值,-TVR_平均值)

欢迎来到SO。请阅读多种方式。一种方式是
df$Sales/ave(df$Sales,df$reg\u name)
Brilliant。谢谢@RonakShah。已经找了好几个小时了!很有帮助
    data_LE <- read.csv("data_LE.csv", stringsAsFactors = F)

     data_LE%>%
      group_by(reg_name)%>%
      mutate(sal_mean=mean(Sales),TVR_mean=mean(TVR), sal_rt = Sales/sal_mean, TVR_rt= TVR/ TVR_mean)%>%
      select(-Sales, -TVR, - sal_mean, -TVR_mean)