R数据框中如何用双条件IF语句获取符合条件的人员姓名?
如何编写带双条件的IF语句获取符合条件的人员姓名?
我来帮你梳理下问题哈~你现在的代码逻辑有点小问题,导致没法正确输出符合条件的球员姓名。先拆解下问题,再给你几个可行的解决方案:
你的代码问题所在
你当前的print语句逻辑有误:
print(Basketball$Person == (Basketball$TwoPoint >= 45) && (Basketball$ThreePoint >= 45))
这里的&&会把整个条件向量压缩成单一布尔值(因为你先用了any()判断),然后把每个球员姓名和这个布尔值做比较,得到的自然是一堆TRUE/FALSE,而不是你想要的符合条件的姓名。
另外,其实如果只是要提取符合条件的姓名,不一定非要用if语句包裹——直接筛选会更简洁;但如果需要先判断是否存在符合条件的记录再输出,那if语句是有用的。
解决方案1:直接筛选(最简洁)
不需要if语句,直接用条件向量索引提取符合要求的球员姓名:
# 直接筛选两分球和三分球命中率均≥45%的球员 qualified_players <- Basketball$Person[Basketball$TwoPoint >= 45 & Basketball$ThreePoint >= 45] print(qualified_players)
这样就能直接得到你要的2个球员姓名啦。
解决方案2:结合IF语句判断后输出
如果你需要先判断是否存在符合条件的球员,再决定输出内容,可以这么写:
# 先定义条件向量(复用性更强) meets_criteria <- Basketball$TwoPoint >= 45 & Basketball$ThreePoint >= 45 # 判断是否有符合条件的球员 if (any(meets_criteria)) { # 提取并打印符合条件的姓名 print(Basketball$Person[meets_criteria]) } else { # 没有符合条件时的提示 print("没有找到两分球和三分球命中率均≥45%的球员") }
这个写法更严谨,能覆盖“没有符合条件球员”的场景。
小提示
在R里,&是向量级别的逻辑与(会对每个元素逐一判断),而&&是标量级别的逻辑与(只判断第一个元素,然后返回单一布尔值)——筛选数据时一定要用&,别用错啦!
内容的提问来源于stack exchange,提问作者Joseph Reyes
相关产品推荐
相关产品推荐

