我是一个使用普通索引进行子集化的数据帧。代码如下。
dframe <- dframe[1:10, c(-3,-7:-10)]
但是当我写dframe $ Symbol时,我得到了输出。
BABA ORCL LFC TSM ACT ABBV MA ABEV KMI UPS
3285 Levels: A AA AA^B AAC AAN AAP AAT AAV AB ABB ABBV ABC ABEV ABG ABM ABR ABR^A ABR^B ABR^C ABRN ABT ABX ACC ACCO ACE ACG ACH ACI ACM ACN ACP ACRE ACT ACT^A ACW ADC ADM ADPT ADS ADT ADX AEB AEC AED AEE AEG AEH AEK AEL AEM AEO AEP AER AES AES^C AET AF AF^C ... ZX
我想知道这里发生了什么。 dframe数据帧是仅包含10行还是所有行,但只输出10行?
由于
答案 0 :(得分:2)
这只是因素的运作方式。当您对因子进行子集化时,它会保留所有级别,甚至是那些不再在子集中表示的级别。例如:
Fatal error: Call to a member function other()
要回答您的问题,将所有缺失的级别附加到某个因素实际上有点棘手。你必须将现有的因子数据与所有缺失的索引结合起来(这里我指的是因子类在内部用来将实际因子数据映射到其水平向量的整数索引,它被存储为因子的属性对象),然后从该组合数据重建一个因子(使用原始级别)。下面我演示了这一点,现在随机化从f1 <- factor(letters);
f1;
## [1] a b c d e f g h i j k l m n o p q r s t u v w x y z
## Levels: a b c d e f g h i j k l m n o p q r s t u v w x y z
f2 <- f1[1:10];
f2;
## [1] a b c d e f g h i j
## Levels: a b c d e f g h i j k l m n o p q r s t u v w x y z
中取得的子集,以证明该顺序无关紧要:
f1