我有2个数据框
lookup_table <- data.frame(Country = c("UK","France", "Germany"), A = c(0,0,1), B = c(1,6,7), C = c(4,8,9))
set.seed(123) # for being reproducible
df <- data.frame(Country = c("UK","UK","France","France","Germany","Germany","Germany","France","UK"), Values = runif(9, 1, 10))
我想在df中有第3列,该列基于第2列中的值以及国家/地区来分配类。
类似于以下内容,但值不应固定:它们应取决于查找表中的值和国家/地区
Class <- function(x) {
if(x > 0 & x <= 1) y <- "A"
if(x > 1 & x <= 4) y <- "B"
if(x > 4) y <- "C"
return(y)
}
df$Class <- sapply(df$Values,Class)
预先感谢您的任何帮助
这是dplyr
解决方案。
library(dplyr)
df %>%
inner_join(lookup_table, by = "Country") %>%
mutate(Class = ifelse(Values > A & Values < B, "A",
ifelse(Values > B & Values < C, "B",
ifelse(Values > C, "C", "Not_found"))))
select(-c(A,B,C))
在管道的末端添加一个清洁的输出data.frame
。此方法的另一个好处是,任何不在范围内的值都将标记为"Not_found"
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句