我有一个像primary这样的数据框架和另一个像secondary这样的数据框架:
library(dplyr)
primary <- data.frame(
id = c("A123", "B456", "C789", "D012"),
prod = c("1111", "2222", "3333", "4444"),
d= c("USA", "CAN", "MEX", "BRA")
)
secondary <- data.frame(
id= c("A123", "B456", "C789", "D012"),
prod= c("1111", "2222", "3333", "4444"),
rec_d = c("USA", "CAN,MEX", NA, "BRA")
)
我想通过(id,prod)和检查d是否在rec_d中来执行left_join(primary,secondary)。
我尝试了以下代码,但没有成功:
result <- left_join(primary, secondary, by = c("id", "prod")) %>%
mutate(flag = ifelse(d %in% rec_d| is.na(rec_d), 1, 0))
预期的结果是:
desired <- structure(list(id = c("A123", "B456", "C789", "D012"), prod = c("1111",
"2222", "3333", "4444"), d = c("USA", "CAN", "MEX", "BRA"), rec_d = c("USA",
"CAN,MEX", NA, "BRA"), flag = c(1, 1, 0, 1)), class = "data.frame", row.names = c(NA,
-4L))
有线索吗
2条答案
按热度按时间46scxncf1#
或:
lsmd5eda2#
我们可以使用
dplyr::case_when
和.default = 0
。我觉得它使mutate语句比if_else更清晰,里面有复杂的逻辑语句。