r - 寻求一种更干净的方法来避免嵌套 if 语句(使用 sapply)

标签 r if-statement sapply

我有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 中有第三列,它根据第 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”

关于r - 寻求一种更干净的方法来避免嵌套 if 语句(使用 sapply),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38433873/

相关文章:

r - 使用 >1000 个选项更新服务器端选择输入的选择失败

if-statement - 如何比较 v-if 与 Vue.js 中的值

r - 什么文档告诉我们 "["可以用作函数?

excel - CONCATENATE(IF()) - 如何简化当前的解决方案?

c++ - 使用和 if/else 语句输出到屏幕或文件

r - R 中的快速方差分析计算

r - 将列中的最大值除以行中的值之和

r - 在用户定义函数中调用 glm() 函数

r - 将多个数据帧存储到一个数据结构中-R

r - 在包 C50 中找不到数据集 'churn'