我是一个新的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命令是否对这个变量做了些什么,因为我的理解是它不应该。并且,我已经使用此数据运行了许多类似的命令,并且在每个数据之后不会发生此问题。
有关正在发生的事情以及如何解决此问题的任何见解?
答案 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,而不是将变量设置为等于该值。