R- Замена функции ifelse на функцию dplyr - PullRequest
0 голосов
/ 06 ноября 2018

Мне интересно, как заменить эту функцию ifelse на функцию из библиотеки dplyr.

df_w <- data.frame(
 n = sample(1:10),
 country = c("France", "Italy", "Albania", 
 "Australia","Austria","Belgica","Norway","Brazil", 
 "Ireland","Uruguay")
)

df_c <- data.frame(
value = c(1000,2000,3000),
country_name = c("France", "Italy", "Albania"))

df_w$country = as.character(df_w$country)
df_c$country_name = as.character(df_c$country_name)

df_w$n <- ifelse(df_c$country == df_w$country, df_c$value, 0)
#longer object length is not a multiple of shorter object length

Я получаю сообщение об ошибке "более длинный объект ...", плюс я помню, что где-то читал, что не рекомендуется использовать ifelse для чрезмерного количества проверок. Я проверял другие ответы из stackoverflow, но сейчас я не нашел ничего подходящего для этой проблемы.

1 Ответ

0 голосов
/ 06 ноября 2018

Вы также можете использовать функцию Base R's merge(). При включении параметра all = TRUE пустые строки объединяются в NA.

df_3 <- merge(df_w, df_c, by.x = "country", by.y = "country_name", all = TRUE)

Затем вы можете заменить отсутствующие значения нулями.

df_3[is.na(df_3)] <- 0

> df_3
 country  n value
1    Albania  7  3000
2  Australia  2     0
3    Austria 10     0
4    Belgica  6     0
5     Brazil  1     0
6     France  3  1000
7    Ireland  8     0
8      Italy  4  2000
9     Norway  9     0
10   Uruguay  5     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...