0

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

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

我的问题是,当我运行长度命令时,一个基本变量会发生一些变化。“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

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

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

4

3 回答 3

2

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

于 2013-07-30T21:33:24.593 回答
1

(约书亚的回答是正确的。)将来,您可以使用以下方法保护自己免受此类错误的影响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') )  )
                   )
     )

关键是这不会有损坏数据对象的危险,而且它也更容易理解。

于 2013-07-30T21:55:45.513 回答
0

您应该在 which 函数中对所有表达式使用布尔值。确保使用==而不是=返回值 True 或 False,而不是将变量设置为等于该值。

于 2013-07-30T21:38:43.130 回答