web-dev-qa-db-ja.com

dplyrを使用して、1つの列の値を別の列の値で条件付きで置換する

特定の条件に一致する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など)を盲目的に割り当てたくありません。別の特定の列からそれらを引き出したかった。

7
Daniel

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))
11
akrun