1

以下の3つの値があります。私がやりたいのは、 と同じ長さのベクトルを作成することですlookupNA要素には の値が与えられreplace、残りの要素には の対応する位置に値が与えられますdata。例えば

lookup = c(NA, NA, 1, 2, NA, 3, NA)
data = c("user_3", "user_4", "user_6")
replace = "no_user_data"

望ましい出力は次のようになります。c("no_user_data", "no_user_data", "user_3", "user_4", "no_user_data", "user_6", "no_user_data")

tidyverseここでの重要な制約は、できるだけ活用したいということです。私の現在のソリューションは次のようになります。

data <- c(data, replace)
lookup[is.na(lookup)] <- length(data)
data <- data[lookup]

tidyverseいくつかの魔法の助けを借りて、もっと良く見えると信じています。ありがとう!

4

2 に答える 2

6

関数を使用できます。これは、ベクトル内の欠損値dplyr::coalesceを置き換える良い方法です。

dplyr::coalesce(data[lookup], replace)

# [1] "no_user_data" "no_user_data" "user_3"       "user_4"       "no_user_data"
# [6] "user_6"       "no_user_data"
于 2016-12-15T00:47:43.227 に答える