Как я могу умножить все значения столбца, кроме одного в r?

avatar
benny86
1 июля 2021 в 18:17
258
2
1

У меня есть фрейм данных

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" без изменений?

Источник

Ответы (2)

avatar
akrun
1 июля 2021 в 18:18
1

Создайте логический вектор на основе столбца «Примечание». Используйте это для подмножества строк, выберите столбцы, кроме первого столбца, умножьте на 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)]
avatar
ThomasIsCoding
1 июля 2021 в 20:18
1

Другой базовый код 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