我想知道如何替换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的其他答案,但是现在我没有找到任何适合此问题的东西。
答案 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