双重索引尝试失败原因及女海盗名单误含Babice问题咨询
R数据框筛选问题解答
1. 双重索引尝试失败的原因
- 数据框名称拼写错误:你定义的目标数据框是
piratesurvey2,但在子集化代码中误用了piratesurvey,导致引用了错误的数据集(可能是之前存在的同名数据框)。 - 索引逻辑错位:你先通过
piratesurvey$sex == "F"筛选出女性对应的逻辑值,再用这个结果提取piratesurvey$superhero == "Superman"的逻辑值,得到的是仅对应女性的短逻辑向量(长度8)。当用这个短向量去索引完整的name列(长度10)时,R会自动循环重复该短向量,导致原数据的位置匹配完全错位,最终筛选出错误结果。
2. 正确筛选代码及Babice被错误纳入的原因
正确筛选喜欢超人的女海盗姓名的代码
直接用逻辑与(&)组合两个条件,同时筛选出性别为女且喜欢超人的行:
piratesurvey2$name[piratesurvey2$sex == "F" & piratesurvey2$superhero == "Superman"]
运行结果应为:
[1] "Lea" "Wendy" "Gioia"
Babice被错误纳入的原因
- 数据集引用错误:你的代码中使用了
piratesurvey而非piratesurvey2,这意味着你查询的不是你定义的最新数据集。在piratesurvey中,Babice的superhero值可能被设为了Superman,导致她被错误选中。 - 索引逻辑的本质缺陷:即使修正了数据框名称,你的双重索引方法仍会出错。例如,修正后
(piratesurvey2$superhero == "Superman")[piratesurvey2$sex == "F"]会得到长度为8的逻辑向量:[FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE]。当用这个向量索引长度为10的name列时,R会循环该向量,使得第6个位置(Babice)被错误标记为TRUE——因为该位置对应循环后向量的第6个元素,而这个元素原本是对应第6位女性(Wendy)的TRUE值,却被错误映射到了全表第6个姓名(Babice)。
内容的提问来源于stack exchange,提问作者kzpx67
相关产品推荐
相关产品推荐

