R 取百分比向量并乘以列

R 取百分比向量并乘以列,r,join,dplyr,R,Join,Dplyr,我在下面有一个数据集示例: Gran1 <- c('A','A'); Gran2 <- c('B', 'B'); Gran3 <-c('C','D'); Metric1 <- c(1500, 1700); Metric2 <- c(200, 50) df <- data.frame(Gran1, Gran2, Gran3, Metric1, Metric2) df Gran1 Gran2 Gran3 Metric1 Metric

我在下面有一个数据集示例:

Gran1 <- c('A','A'); Gran2 <- c('B', 'B'); Gran3 <-c('C','D'); Metric1 <- c(1500, 1700); Metric2 <- c(200, 50)

df <- data.frame(Gran1, Gran2, Gran3, Metric1, Metric2)
df

Gran1    Gran2     Gran3    Metric1     Metric2
    A        B         C       1500         200
    A        B         D       1700          50
结果应该如下所示:

Gran1  Gran2   Gran3  Metric1   Metric2   Percent    M1*Percent   M2*Percent
    A      B       C     1500       200         0             0            0
    A      B       C     1500       200     0.001           1.5          0.2
    A      B       C     1500       200     0.002             3          0.4
    A      B       C     1500       200     0.003           4.5          0.6
    .      .       .       .         .         .              .            .
    .      .       .       .         .         .              .            .
    .      .       .       .         .         .              .            .
    .      .       .       .         .         .              .            .
    A      B       C     1500       200     0.990          1485          198
    A      B       C     1500       200     1.000          1500          200
    A      B       D     1700        50         0             0            0
    A      B       D     1700        50     0.001           1.7         0.05
    A      B       D     1700        50     0.002           3.4         0.10
    A      B       D     1700        50     0.003           5.1         0.15 
    .      .       .       .         .         .              .            .
    .      .       .       .         .         .              .            .
    .      .       .       .         .         .              .            .
    .      .       .       .         .         .              .            .

我想你可以使用tidyr的
穿越
。调整您的示例将产生:

library(tidyr)
library(dplyr)
df1 <- data.frame(v1=c("A","B"), v2=c("C","D"), metric1=c(10,20), metric2=c(30,40))
df2 <- data.frame(percent=seq(0,100, by=10))
df <- crossing(df1, df2)
df %<>% mutate(p_metric1=metric1*percent, p_metric2=metric2*percent)
library(tidyr)
图书馆(dplyr)
df1
library(tidyr)
library(dplyr)
df1 <- data.frame(v1=c("A","B"), v2=c("C","D"), metric1=c(10,20), metric2=c(30,40))
df2 <- data.frame(percent=seq(0,100, by=10))
df <- crossing(df1, df2)
df %<>% mutate(p_metric1=metric1*percent, p_metric2=metric2*percent)