首页 > 解决方案 > 将单元格值与第一列相乘

问题描述

我有一个如下所示的数据框

sample_data <- data.frame(Cohort = c("Q1", "Q2", "Q3", "Q4"),
                      Cohort.Size = c(120, 234, 345, 222),
                      MO1 = c(8.3, 7.1, 2.4, 5.4),
                      MO2 = c(6.6, 3.2, 5.3, NA),
                      MO3 = c(2.3, 4.5, NA, NA),
                      MO4 = c(4.5, NA, NA, NA))

如您所见,第二列Cohort.Size由绝对数字组成,而所有其余列均MO1, MO2, MO3, MO4显示百分比。是否有一个简单的解决方案,如何将百分比值与第一列中的相应值相乘以获得绝对数字?

我正在寻找的结果将是下表:

Cohort | Cohort.Size |  MO1 | MO2  | MO3  | MO4
Q1     | 120         | 9.96 | 7.92 | 2.76 | 5.4
Q2     | 234         | 16.6 | 7.49 | 10.53| 
Q3     | 345         | 8.28 | 18.29|      | 
Q4     | 222         | 11.99|      |      | 

谢谢!

标签: rdataframemultiplicationcalculation

解决方案


您可以直接在数据框上执行此计算。

cols <- grep('MO', names(sample_data))
sample_data[cols] <- sample_data$Cohort.Size * sample_data[cols]/100
sample_data

#  Cohort Cohort.Size    MO1    MO2   MO3 MO4
#1     Q1         120  9.960  7.920  2.76 5.4
#2     Q2         234 16.614  7.488 10.53  NA
#3     Q3         345  8.280 18.285    NA  NA
#4     Q4         222 11.988     NA    NA  NA

推荐阅读