特定の条件に一致する1つの列の値を、別の列の同じ行の値に置き換えたい。この例を考えてみましょう:
library(tidyverse)
data <- tribble(
~X25, ~Other,
"a", NA,
"b", NA,
"Other", "c",
"Other", "d"
)
View(data)
# Works to change values in X25
within(data, {
X25 <- ifelse(X25 == "Other", Other, X25)
})
# Changes values in X25 to NA and doesn't replace X25 with appropriate value from Other column
data %>% mutate(X25 = replace(X25, X25 == "Other", Other))
「within」を使用するコードはうまく機能します。必要に応じて、dplyrをどのように使用できますか(より長い変換/要約プロセスの一部として)?
編集:これは dplyrで変数の値を変更 とは異なるシナリオです。すべての一致するセルに同じ値(NAなど)を盲目的に割り当てたくありません。別の特定の列からそれらを引き出したかった。
replace
の場合、長さは同じであるため、Other
も論理式でサブセット化する必要があります
data %>%
mutate(X25 = replace(X25, X25 == "Other", Other[X25=="Other"]))
別のオプションはcase_when
data %>%
mutate(X25 = case_when(X25=="Other"~ Other,
TRUE ~ X25))
またはifelse
data %>%
mutate(X25 = ifelse(X25 == "Other", Other, X25))