【问题标题】:Multiply cell values with first column [duplicate]将单元格值与第一列相乘[重复]
【发布时间】:2021-02-22 10:59:01
【问题描述】:

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

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|      |      | 

谢谢!

【问题讨论】:

    标签: r dataframe multiplication calculation


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

      你可以使用sapply:

      cbind(sample_data[,1:2], 
           sapply(sample_data[grepl("MO", names(sample_data))], function(x) x*sample_data$Cohort.Size/100))
       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
      

      【讨论】:

        猜你喜欢
        • 2018-02-10
        • 1970-01-01
        • 2011-07-02
        • 1970-01-01
        • 1970-01-01
        • 2017-07-17
        • 2022-06-10
        • 2022-08-07
        • 1970-01-01
        相关资源
        最近更新 更多