为什么R语言中相同数据按索引取值和which查询得到不同结果?
索引不一致的常见原因
- 核心原因是你混淆了Excel行号和R中向量的实际位置索引:
- 如果你是直接对照Excel里的可视行号写的索引
215,大概率Excel里存在隐藏行、过滤行,你用的读入函数(比如readxl::read_excel默认配置)不会读取这些隐藏行,因此原始Excel的第215行,读入R之后对应的向量位置就是163,中间的差值就是被跳过的隐藏行数量。 - 如果你的
data$response.keys是命名向量,向量的名称对应原始Excel的行号,那你用[215]取数的时候是按照名称匹配取值,而which()返回的是向量的实际物理位置,所以会出现名称为215的元素实际在第163位的情况。
- 如果你是直接对照Excel里的可视行号写的索引
- 你两种写法结果都正确的原因:刚好你取的两个位置的
response.keys值都是s,所以判断逻辑结果一致。
验证方法
你可以运行下面的代码确认:
# 查看两个位置的实际值 print(data$response.keys[163]) print(data$response.keys[215]) # 查看向量是否有命名 print(names(data$response.keys)) # 查看读入的总数据行数,和Excel里的总行数对比 print(nrow(data))
内容的提问来源于stack exchange,提问作者Shawn
相关产品推荐
相关产品推荐

