在R中按索引访问因子(factor)组件异常问题求助
问题分析与解决建议
看起来你是混淆了因子的元素和因子的水平这两个核心概念啦!
先理清楚两者的区别:
- 你用
managers[1]或者managers[2]这种索引方式,访问的是因子向量里的单个数据元素。从你贴出来的managers输出能看到,前34个元素本来都是Bob Smith,所以不管你取前34个里的哪个位置,结果自然都是这个值——这完全符合你的数据实际情况,不是代码bug哦。 - 而你用
nlevels(managers)看到的5个“水平”,是这个因子包含的所有类别标签,如果想访问这些类别,得用levels(managers)来获取所有水平列表,再用索引定位,比如levels(managers)[2]就能拿到第二个水平Derek Abraham。
再看你的代码,其实赋值语句managers <- oppData$Manager <- as.factor(oppData$Manager)是没问题的,它会把原数据框里的Manager列转成因子,同时赋值给managers变量。如果不需要修改原数据框的话,单独写managers <- as.factor(oppData$Manager)就足够了,更简洁。
给你几个实用的示例代码:
# 取因子向量的第1个数据元素(对应数据里的实际值) managers[1] # 取因子的第1个类别水平 levels(managers)[1] # 取因子的第3个类别水平 levels(managers)[3] # 查看每个元素对应的水平编码(1对应第一个水平,2对应第二个,以此类推) as.integer(managers)
如果你还有疑问,可以打印head(oppData$Manager, 10)看看原数据的前10行经理值,就能确认数据本身是不是前若干行都是Bob Smith啦。
内容的提问来源于stack exchange,提问作者Sumchans
相关产品推荐
相关产品推荐

