在R中运行命令后,变量意外更改

时间:2013-07-30 21:29:23

标签: linux r

我是一个新的R用户,工作要求我在Linux上使用R。我遇到了一个非常奇怪的问题,希望有些专家用户可以提供解决方案。 :)

我有一个包含> 200,000个观察/参与者和> 300个变量的大型数据集,其涉及从各种基线数据集进行子集化以创建工作数据集。

我的问题是,当我运行length命令时,基本变量会发生一些变化。 “Withdrawlevel”是变化的变量。这就是这个变量应该是这样的:

describe(tbl$Withdrawlevel)
tbl$Withdrawlevel
      n missing  unique    Mean
   2833  218988       3   1.474

然后我运行了几个长度命令,如下所示,因为我有兴趣获得符合特定条件的参与者数量。 例如:

length(which(tbl[,'Reg_age_dob']>=18 & as.Date(tbl[,'QuestionnaireEndDate'])>='2013-07-21' & as.Date(tbl[,'QuestionnaireEndDate'])< '2013-07-28' & (is.na(tbl$Withdrawlevel) | (tbl$Withdrawlevel!=3) & (tbl$WithdrawDate<'2013-07-28')) | ((tbl$Withdrawlevel=3) & (tbl$WithdrawDate>='2013-07-28'))  )) 

然后,Withdrawlevel变量变化:

describe(tbl$Withdrawlevel)                                                   tbl$Withdrawlevel
      n missing  unique    Mean
 221821       0       1       3

上面描述的length命令是否对这个变量做了些什么,因为我的理解是它不应该。并且,我已经使用此数据运行了许多类似的命令,并且在每个数据之后不会发生此问题。

有关正在发生的事情以及如何解决此问题的任何见解?

3 个答案:

答案 0 :(得分:2)

tbl$Withdrawlevel=3将值3分配给tbl$Withdrawlevel的所有观察值。你的意思是tbl$Withdrawlevel==3

答案 1 :(得分:1)

(Joshua的回答是正确的。)将来你可以使用with保护自己免受此类错误:

with( tbl, length( which(Reg_age_dob >=18 & 
      as.Date(QuestionnaireEndDate) >='2013-07-21' & 
      as.Date(QuestionnaireEndDate) < '2013-07-28' & 
      ( is.na(tbl$Withdrawlevel) | (Withdrawlevel!=3) & ( WithdrawDate <'2013-07-28') )  | 
      ( (tbl$Withdrawlevel=3) & ( WithdrawDate >='2013-07-28') )  )
                   )
     )

重点是,这不会有破坏数据对象的危险,它也更容易理解。

答案 2 :(得分:0)

你应该在你的哪个函数中使用布尔表示所有表达式。请确保使用==而不是=,它返回值True或False,而不是将变量设置为等于该值。