R数据帧子集返回意外的列

时间:2015-07-27 16:18:01

标签: r subset

我有这种情况,我没有。

我有一个包含28列的数据框SampleA:

    > str(sampleA)
'data.frame':   400000 obs. of  28 variables:
 $ residence               : Factor w/ 2 levels "Domestic","International": 1 2 1 1 1 1 1 2 2 1 ...
 $ part_number             : int  8002 8002 8002 8002 8002 8002 8002 8002 8002 8002 ...
 $ is_intraoral            : int  1 0 1 1 0 1 0 0 0 1 ...
 $ doc_level               : int  1 2 2 2 1 2 1 2 2 2 ...
 $ doc_country             : Factor w/ 100 levels "AD ","AE ","AM ",..: 16 32 96 96 96 96 96 19 33 16 ...
 $ upper_posterior_att_v   : int  2 1 3 4 2 3 2 2 2 1 ...
 $ upper_anterior_att_v    : int  3 2 2 4 1 4 3 1 2 3 ...
 $ lower_posterior_att_v   : int  1 2 1 3 2 2 2 4 2 2 ...
 $ lower_anterior_att_v    : int  1 4 1 4 4 1 1 1 4 1 ...
 $ plan_cBL_v              : int  3 4 2 4 1 4 2 3 3 1 ...
 $ plan_cMD_v              : int  2 4 3 4 2 4 1 2 3 1 ...
 $ plan_cIE_v              : int  3 3 4 4 3 4 2 4 1 1 ...
 $ plan_rBL_v              : int  2 4 3 4 2 4 2 3 4 1 ...
 $ plan_rMD_v              : int  2 4 4 4 2 4 3 4 1 1 ...
 $ plan_rIE_v              : int  3 3 4 4 3 4 2 4 1 1 ...
 $ plan_inclination_v      : int  3 3 4 3 3 4 2 2 3 1 ...
 $ plan_rotation_v         : int  2 1 4 2 3 4 1 2 1 2 ...
 $ plan_angulation_v       : int  2 2 3 3 3 4 3 4 1 1 ...
 $ upper_post_total_space_v: int  4 1 1 4 1 1 4 4 1 1 ...
 $ upper_ant_total_space_v : int  4 1 1 4 1 1 1 1 1 1 ...
 $ lower_post_total_space_v: int  1 1 1 1 1 1 1 4 1 1 ...
 $ lower_ant_total_space_v : int  1 1 1 1 1 1 4 4 1 1 ...
 $ active_stages_v         : int  2 4 4 4 4 4 2 3 4 1 ...
 $ average_overbite_v      : int  1 3 1 1 3 2 3 4 3 3 ...
 $ average_overjet_v       : int  1 3 2 1 4 1 4 3 1 4 ...
 $ sum_ipr_v               : int  1 4 3 1 4 1 1 3 4 3 ...
 $ patient_age_v           : Factor w/ 2 levels "Adult","Teen": 1 1 1 1 1 1 1 1 1 1 ...
 $ is_CC_v                 : Factor w/ 2 levels "no","yes": 1 2 2 2 1 2 1 2 2 2 ...

我还有一个长度为27的整数向量:

round(sao$par)
 [1] 1 0 1 1 0 0 0 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0

我尝试通过以下方式对SampleA进行分组:

final_sample <- sampleA[, round(sao$par) == 1]

我期待获得一个17变量数据帧,但出于某种原因,我得到了额外的一个,第18位:

> str(final_sample)
'data.frame':   400000 obs. of  18 variables:
 $ residence               : Factor w/ 2 levels "Domestic","International": 1 2 1 1 1 1 1 2 2 1 ...
 $ is_intraoral            : int  1 0 1 1 0 1 0 0 0 1 ...
 $ doc_level               : int  1 2 2 2 1 2 1 2 2 2 ...
 $ lower_posterior_att_v   : int  1 2 1 3 2 2 2 4 2 2 ...
 $ plan_cBL_v              : int  3 4 2 4 1 4 2 3 3 1 ...
 $ plan_cMD_v              : int  2 4 3 4 2 4 1 2 3 1 ...
 $ plan_cIE_v              : int  3 3 4 4 3 4 2 4 1 1 ...
 $ plan_rBL_v              : int  2 4 3 4 2 4 2 3 4 1 ...
 $ plan_rMD_v              : int  2 4 4 4 2 4 3 4 1 1 ...
 $ plan_rIE_v              : int  3 3 4 4 3 4 2 4 1 1 ...
 $ plan_inclination_v      : int  3 3 4 3 3 4 2 2 3 1 ...
 $ plan_rotation_v         : int  2 1 4 2 3 4 1 2 1 2 ...
 $ plan_angulation_v       : int  2 2 3 3 3 4 3 4 1 1 ...
 $ upper_ant_total_space_v : int  4 1 1 4 1 1 1 1 1 1 ...
 $ lower_post_total_space_v: int  1 1 1 1 1 1 1 4 1 1 ...
 $ lower_ant_total_space_v : int  1 1 1 1 1 1 4 4 1 1 ...
 $ active_stages_v         : int  2 4 4 4 4 4 2 3 4 1 ...
 $ is_CC_v                 : Factor w/ 2 levels "no","yes": 1 2 2 2 1 2 1 2 2 2 ...

怎么可能?我的代码是做不同的吗?

1 个答案:

答案 0 :(得分:0)

整数向量的长度为27,而数据帧SampleA的长度为28列。因此,当您使用向量进行子集时,您不需要为SampleA中的第28列指定要执行的操作,即包含它或将其排除。在这种情况下,R会重复您提供的向量,直到它具有长度为28的向量来处理。例如,尝试使用c(1,0,0,0)进行子集化。您会发现SampleA中的每个第四个变量都包含在结果中。因此,要获得您要查找的结果,您应该使用c(round(sao$par), 0) ==1找到子集。