r - 如何将除 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”行不变?
解决方案
根据“注释”列创建逻辑向量。使用它来对行进行子集化,选择除第一列之外的列,乘以 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)]
推荐阅读
- javascript - 如何将 Json 数据从 python 发送到 javascipt
- python - 如何让程序不断重复,直到我输入停止它的特定数据?
- python - 不匹配值的 Pandas 系列和 Nan 值
- terraform - Terraform - 根据条件创建或不创建资源
- android - 三星诺克斯 - exchangeAccountPolicy.addNewAccount 返回 -1
- mule - 根据常用字段和国家映射两个有效载荷数据
- angular - 使用 socket.io 以角度方式对方法 post 进行 http 调用
- swift - 在 iOS 中保存来自 ISO 8601、RFC3339 格式日期的本地时区信息
- python - argparse 命令行界面
- cmake - CMake空间分隔的对象列表