Вам нужно создать условный оператор.
В базе R:
df$x <- ifelse(df$y == "A", df$x/1000, df$x)
В dplyr
:
library(dplyr)
df <- df |>
mutate(x = if_else(y == "A", x/1000, x))
data.table
вариант с использованием fifelse
следующим образом:
library(data.table)
df = data.table(x = c(1000,2000,10,2), y = c('A','A','B','B'))
df[,x:=fifelse(y == "A", x/1000, x),]
df
#> x y
#> 1: 1 A
#> 2: 2 A
#> 3: 10 B
#> 4: 2 B
Created on 2023-02-18 with reprex v2.0.2
Мы могли бы использовать методы data.table
, так как ввод — это data.table
library(data.table)
df[y == 'A', x := x/1000]
-выход
> df
x y
1: 1 A
2: 2 A
3: 10 B
4: 2 B
База R: подмножество с [
:
df$x[df$y == "A"] <- df$x[df$y == "A"]/1000
x y
1: 1 A
2: 2 A
3: 10 B
4: 2 B