首页 > 解决方案 > 如何将除 r 中的一个列之外的所有值相乘?

问题描述

我有一个数据框

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

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

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

标签: rdataframemultiplication

解决方案


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

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

推荐阅读