2013-07-30 35 views
0

我是一個新的R用戶,工作要求我在Linux上使用R.我遇到了一個很奇怪的問題,希望有些專家用戶可以提供一個解決方案。 :)在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 

是上面做一些該變量描述的長度命令,因爲我的理解是,它不應該。而且,我用這些數據運行了許多類似的命令,並且在每個命令之後都不會發生這個問題。

瞭解正在發生的事情以及我如何解決此問題?

回答

2

tbl$Withdrawlevel=3將值3賦值爲tbl$Withdrawlevel的所有觀察值。你的意思是tbl$Withdrawlevel==3

0

你應該在你的函數中使用所有表達式的布爾值。請務必使用==而不是=,它返回True或False的值,而不是將變量設置爲等於該值。

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')) ) 
        ) 
    ) 

的一點是,這並沒有破壞你的數據對象危險和它也更容易理解。