Я наткнулся на эту интересную статью от UncleBob The Little Mocker . Это объясняет всю терминологию очень легко понять, поэтому она полезна для новичков. Статья Мартина Фаулерса читается специально для начинающих, таких как я.
Вы можете использовать ifelse
. Если dat
является предоставленным вами data.frame, то должно сработать что-то вроде этого:
dat[, "Target"] <- ifelse(dat[,"Unit"]=="ng/L", dat[,"Target"]/1000, dat[,"Target"])
Если у вас более двух разных юнитов, вам понадобится вложить вызов ifelse
или вызов [ 114] последовательно.
Обратите внимание, что ifelse
является векторизованной версией if
и обрабатывает весь столбец одновременно.
Вы можете использовать вложенное выражение ifelse
, чтобы поймать все 3 сценария (то же самое, от ng
до ug
и от ug
до ng
)
ifelse(df$Dimension == df$Unit, df$Target,
ifelse(df$Dimension != df$Unit & grepl('ug', df$Dimension), df$Target / 1000,
df$Target * 1000))
#[1] 0.012 1.000 0.001