【问题标题】:How can I multiply all values of a column except one in r?如何将除 r 中的一列之外的所有值相乘?
【发布时间】:2021-07-01 18:17:15
【问题描述】:

我有一个数据框

Note <- c("Revenue","Profit", "EPS", "Receipts", "Cash")
HY2020 <- c(1:5)
HY2019 <- c(6:10)

df <- data.frame(Note, HY2020, HY2019)

有没有办法将列 HY2020HY2019 乘以 1000 但保持“EPS”行不变?

【问题讨论】:

    标签: r dataframe multiplication


    【解决方案1】:

    根据“注释”列创建逻辑向量。使用它对行进行子集化,选择除第一列以外的列,乘以 1000,然后通过赋值(&lt;-)更新回原来的相同子集数据

    i1 <- df$Note != "EPS"
    df[i1, -1] <- df[i1, -1] * 1000
    

    或者我们使用dplyr

    library(dplyr)
    df <- df %>%
         mutate(across(starts_with("HY"),
               ~ case_when(Note != "EPS" ~ . * 1000, TRUE ~ as.numeric(.))))
    

    -输出

    df
     Note HY2020 HY2019
    1  Revenue   1000   6000
    2   Profit   2000   7000
    3      EPS      3      8
    4 Receipts   4000   9000
    5     Cash   5000  10000
    

    data.table

    library(data.table)
    setDT(df)[Note != "EPS", (names(df)[-1]) := lapply(.SD, `*`, 1000)]
    

    【讨论】:

      【解决方案2】:

      另一个带有ifelse的基本R代码

      > df[-1] <- df[-1] * ifelse(df$Note != "EPS", 1000, 1)
      
      > df
            Note HY2020 HY2019
      1  Revenue   1000   6000
      2   Profit   2000   7000
      3      EPS      3      8
      4 Receipts   4000   9000
      5     Cash   5000  10000
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-03
        • 1970-01-01
        • 1970-01-01
        • 2018-08-29
        • 1970-01-01
        • 2021-01-03
        • 2020-12-17
        • 1970-01-01
        相关资源
        最近更新 更多