是否存在R函数可将单列值与另一列全部值比较?含mapply应用需求
解决方法:用
mapply()实现元素比较并标记 先拆解你的需求:对a列的每个元素,检查它是否大于b列中的任意一个元素,满足条件则标记为YES,否则标记为NO。下面直接给出可行的实现方案:
步骤1:定义示例数据
先把你给出的测试数据构造出来:
df <- data.frame(a = c(10, 15, 8), b = c(22, 11, 9))
步骤2:用mapply()完成逻辑判断
mapply()可以逐个遍历a列的元素,对每个元素执行自定义的比较逻辑。我们需要为每个a中的值x,判断是否存在b中的元素小于x(用any(x > df$b)实现):
df$compar <- mapply(function(x) { # 检查当前x是否大于b列中的任意元素 if (any(x > df$b)) { "YES" } else { "NO" } }, df$a)
步骤3:查看结果
运行完代码后,打印df就能得到你期望的输出:
> df a b compar 1 10 22 YES 2 15 11 YES 3 8 9 NO
备选简化写法(非mapply但更高效)
如果不局限于mapply,可以用向量运算结合ifelse和sapply来简化代码,逻辑完全一致:
df$compar <- ifelse(sapply(df$a, function(x) any(x > df$b)), "YES", "NO")
内容的提问来源于stack exchange,提问作者Vortexounet
相关产品推荐
相关产品推荐

