我怎样才能乘以一列的所有值,除了 r 中的一个值?
How can I multiply all values of a column except one in r?
我有一个数据框
Note <- c("Revenue","Profit", "EPS", "Receipts", "Cash")
HY2020 <- c(1:5)
HY2019 <- c(6:10)
df <- data.frame(Note, HY2020, HY2019)
有没有办法将 HY2020 和 HY2019 列乘以 1000 但保持 'EPS' 行不变?
根据 'Note' 列创建一个逻辑向量。使用它来对行进行子集化,select 除第一列之外的列,乘以 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)]
另一个基本 R 代码 ifelse
> 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
我有一个数据框
Note <- c("Revenue","Profit", "EPS", "Receipts", "Cash")
HY2020 <- c(1:5)
HY2019 <- c(6:10)
df <- data.frame(Note, HY2020, HY2019)
有没有办法将 HY2020 和 HY2019 列乘以 1000 但保持 'EPS' 行不变?
根据 'Note' 列创建一个逻辑向量。使用它来对行进行子集化,select 除第一列之外的列,乘以 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)]
另一个基本 R 代码 ifelse
> 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