在R语言中基于比分创建布尔列全为FALSE,该如何解决?
解决R中创建网球比赛布尔列的问题
嘿,我来帮你搞定这个小问题!首先先提个小细节:R里变量名不能包含减号,建议把tennis-game改成tennis_game这类合法的变量名,避免后续报错~
回到你的问题,betterAtTennis列全为FALSE的原因,是对isTrue()函数的用法理解有偏差:
isTrue()是用来判断单个逻辑值的函数,它不会对向量进行逐元素判断。当你传入player1 > player2这个逻辑向量时,isTrue()会把整个向量当成一个整体——只有当向量里的每一个元素都是TRUE时,它才返回TRUE,否则直接返回FALSE。而你的数据里第三场比赛player1输了,所以整个向量不是全TRUE,最终赋值给新列的就是单个FALSE,并被重复填充到所有行里。
正确的实现方式
其实非常简单,直接利用R的向量运算特性,逐行比较即可:
# 直接对每一行的player1和player2比分做比较 tennis_game$betterAtTennis <- player1 > player2
这样操作后,前两场player1获胜的行会得到TRUE,最后一场落败的行得到FALSE,完全符合你的需求。
进阶:处理平局场景
如果你的数据里存在比分相等的情况,还可以进一步调整逻辑:
# 平局时设为NA(表示无法判断谁更优) tennis_game$betterAtTennis <- ifelse(player1 > player2, TRUE, ifelse(player1 < player2, FALSE, NA))
内容的提问来源于stack exchange,提问作者R.Kim
相关产品推荐
相关产品推荐

