我有这种情况,我没有。
我有一个包含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 ...
怎么可能?我的代码是做不同的吗?
答案 0 :(得分:0)
整数向量的长度为27,而数据帧SampleA的长度为28列。因此,当您使用向量进行子集时,您不需要为SampleA中的第28列指定要执行的操作,即包含它或将其排除。在这种情况下,R会重复您提供的向量,直到它具有长度为28的向量来处理。例如,尝试使用c(1,0,0,0)
进行子集化。您会发现SampleA中的每个第四个变量都包含在结果中。因此,要获得您要查找的结果,您应该使用c(round(sao$par), 0) ==1
找到子集。