Я ищу, чтобы удалить значение в переменной, если условие другой переменной выполнено. Например:Установка значения в переменной в NA, условие на другую переменную
df$var1[df$condvar == 0] <- NA
Код выше работает отлично, но мне нужно, чтобы повторить это для десятков большего числа переменных, поэтому var1
выше изменится на var2
, var3
и т.д .. Это всегда основано на том же condvar
, хотя для половины переменных условие равно df$condvar == 1
. Это громоздко повторять эту линию снова и снова, и мне было интересно, был ли более краткий способ кодировать это. Помогла бы одна из функций apply
, или мне нужно создать пользовательскую функцию?
В воспроизводимым примере, я ищу, чтобы избежать повторяющийся характер кода ниже:
ex <- mtcars
ex$mpg[ex$vs == 0] <- NA
ex$disp[ex$vs == 0] <- NA
ex$drat[ex$vs == 0] <- NA
ex$cyl[ex$vs == 1] <- NA
ex$hp[ex$vs == 1] <- NA
ex$wt[ex$vs == 1] <- NA
ex
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 NA 6 NA 110 NA 2.620 16.46 0 1 4 4
Mazda RX4 Wag NA 6 NA 110 NA 2.875 17.02 0 1 4 4
Datsun 710 22.8 NA 108.0 NA 3.85 NA 18.61 1 1 4 1
Hornet 4 Drive 21.4 NA 258.0 NA 3.08 NA 19.44 1 0 3 1
Hornet Sportabout NA 8 NA 175 NA 3.440 17.02 0 0 3 2
Valiant 18.1 NA 225.0 NA 2.76 NA 20.22 1 0 3 1
Duster 360 NA 8 NA 245 NA 3.570 15.84 0 0 3 4
etc.
Я был бы совершенно счастлив, если есть одна строка кода, которая применяется ко всем переменным, для которых condvar == 0
и другой для тех переменных, для которых condvar == 1
.
' df $ var1 [df $ condvar == 0, c ("var1", "var2", ...)] <- NA' – HubertL
Это не работает. Я не понимаю, как будет работать часть кода ', c (" var1 "," var2 ", ...)'. – Phil
@Phil: HubertL означает 'df [df $ condvar == 0, c (" var1 "," var2 ", ...)] <- NA', который работает отлично. – smci