R-将ifelse函数替换为dplyr函数

时间:2018-11-06 12:58:36

标签: r

我想知道如何替换dplyr库中的ifelse函数。

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

我得到一个错误的“ longer object ...”,另外我记得在某个地方读到,对于大量的验证,使用ifelse不是一个好主意。 我正在检查来自stackoverflow的其他答案,但是现在我没有找到任何适合此问题的东西。

1 个答案:

答案 0 :(得分:0)

您还可以使用Base R的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