2016-12-15 49 views
1

我有三個值在下面。我想要做的是創造一個矢量的長度相同lookup,其中NA元件被給予的replace值,並且這些元件的其餘部分中給出data在相應的位置值。例如。然後使用Tidyverse合併兩個向量

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魔法的幫助可能看起來好了很多。謝謝!

+5

'tidyverse'應該是一個回答問題,本身不是問題。你爲什麼要這樣做的任何特定原因? – mpjdem

+1

@mpjdem - 我曾經看到一個建議有'add'' subtract'等函數,所以你可以做'1%>%add(2)'並且獲得'3'。我們還沒有達到高峯。 – thelatemail

回答

5

可以使用dplyr::coalesce功能,這是一個很好的方式replace missing values矢量內:

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" 
+4

'在基數R中'pmax(data [lookup],replace,na.rm = TRUE)'' – thelatemail

2

我們也可以。如果你問我用replacebase R

replace(data[lookup], is.na(lookup), replace) 
#[1] "no_user_data" "no_user_data" "user_3"  "user_4"  "no_user_data" 
#[6] "user_6"  "no_user_data"