2014-12-05 66 views
0

我想創建一個代碼,以確定患者是否患有抑鬱症的合併診斷。問題是,診斷可以記錄在4列之一中:R:使用來自多列的數據創建因子

  • ComorbidDiagnosis;
  • 其他診斷;
  • DischargeDiagnosis;
  • 其他出院診斷。

我一直在使用

levels(dataframe$ynDepression)[levels(dataframe$ComorbidDiagnosis)=="Depression"]<-"Yes" 

所有4列,但我不知道如何編寫那些沒有任何列的診斷誰。我想:

levels(dataframe$ynDepression)[levels(dataframe$DischOtherDiagnosis & 
    dataframe$OtherDiagnosis & 
    dataframe$ComorbidDiagnosis & 
    dataframe$DischComorbidDiagnosis)==""]<-"No" 

我也用& &,而不是嘗試,但沒有奏效。我錯過了什麼嗎? 在此先感謝!

編輯:我嘗試上傳一些示例數據的圖像,但我沒有足夠的聲譽來上傳圖像。我將在這裏放一個例子,但可能無法正常工作:

病人ID PrimaryDiagnosis OtherDiagnosis ComorbidDiagnosis

  1. _________AN__________Depression
  2. _________AN
  3. _________AN__________Depression______PTSD
  4. _________AN_________________________Depression
+0

請提供示例輸入數據。 – Roland 2014-12-05 13:39:33

回答

0

裏面有什麼該[]必須(可轉換爲)布爾值才能使子集工作。例如:

x<-1:5 
x[x>3] 
#4 5 
x>3 
# F F F T T 

工作原因是條件是一個布爾向量。有時候,布爾值可能會含糊不清,如dataframe[,"var"]這意味着dataframe[,colnames(dataframe)=="var"],但R必須能夠以某種方式使其成爲布爾值。

編輯:正如指出的初學者,你也可以用類似df[,c(1,3)],這是數字,但工作方式df[,"var"]相同的子集。我喜歡將這種子集看作隱含的布爾值,因爲它支持「是/否」選擇,但您可能完全不同意並且只考慮它們使R能夠選擇列和行。

就你而言,你使用的條件是無效的(例如)。

您需要類似rowSums(df[,c("var1","var2","var3")]=="")==3這是一個有效的條件。

+0

我不能在我所在的地方使用R,所以我無法檢查我的代碼中的錯誤。這就是爲什麼我把它做得很少,但如果有一個,請告訴我,我會糾正它。 – Vincent 2014-12-05 15:06:11

+0

對子集使用邏輯是一種選擇,但不是子集的唯一途徑。你也可以在你的例子中使用索引:'x [c(4,5)]'如果你想返回x的元素4和5。如果使用'x [which(x> 3)]'',那麼同樣的作品。 – 2014-12-05 15:08:23

+0

你是對的,但我覺得它也可以被看作是一個含蓄的布爾值,其原理與我用'df [,「var」]''所用的例子相同。 – Vincent 2014-12-05 15:15:22

相關問題