Использование dplyr
скорее всего будет чище и быстрее, как для запуска, так и для ввода:
library(dplyr)
df <- data.frame(
x = as.character(LETTERS[1:10]),
y = 1:10
)
df %>%
mutate(
y = ifelse(x == "D", y * 100, y)
)
Другим способом, с помощью dplyr
, также может быть добавление столбца, содержащего множители.
df <- data.frame(
x = as.character(LETTERS[1:3]),
y = 1:3,
z = runif(3),
multipliers = c(5, .3, .2)
)
df %>%
mutate(
y = y * multipliers, # multiply
z = z * multipliers
) %>%
select(-multipliers) # remove multipliers
Ниже приведено полное решение: создайте data.frame, который содержит множитель, соответствующий каждому классу, объедините их и затем умножьте. Чище, быстрее, проще в обслуживании.
multipliers <- data.frame(
class = LETTERS[1:3],
multiplier = c(.3, 5, 100)
)
df <- data.frame(
class = sample(LETTERS[1:3], 100, replace = TRUE),
x = runif(100),
y = runif(100)
)
df %>%
left_join(multipliers, by = "class") %>%
mutate(
x = x * multiplier,
y = y * multiplier
) %>%
select(-multiplier)