R语言统计扑克牌黑桃或偶数牌数量时不同写法结果不一致
问题根因
两段代码返回结果不一致的核心差异是两种取值方式返回的对象类型不同:
- 第一种写法调用
subset()时仅指定select = "Cards",返回的是单列数据框结构,并非预期的牌名字符向量。union()处理数据框时不会按单元格内容做去重合并,自然得不到正确的去重后计数。 - 第二种写法用
[ ]索引取列时,R默认对单列结果自动降维,返回的是牌名字符向量,union()可以正常按元素内容做去重,得到正确结果31。
你的计算逻辑本身是完全正确的:黑桃共13张,全牌堆偶数数值牌共4花色×6个偶数=24张,重叠的黑桃偶数牌共6张,最终结果应为13+24-6=31,和预期一致。
第一种写法修复方案
如果要沿用subset()写法,只需要将取值转为向量即可,两种修改方式任选:
# 方式1:加drop参数强制降维为向量 Spades <- subset(Deck, Suits == "Spades", "Cards", drop = TRUE) Even_Value <- subset(Deck, Value %% 2 == 0, "Cards", drop = TRUE) # 方式2:直接提取数据框的Cards列值 Spades <- subset(Deck, Suits == "Spades")$Cards Even_Value <- subset(Deck, Value %% 2 == 0)$Cards
修改后运行length(union(Spades, Even_Value))即可得到正确结果31。
内容的提问来源于stack exchange,提问作者äppelpaj
相关产品推荐
相关产品推荐

