2015-10-20 103 views
1
STEST       TEST CRESULTC CRESULTS CUNIT SIRESULC SIRESULT SIUNIT VWEEK TYPE WKSLAB SILO SIHI CNLO 
1 TALT      ALT (SGPT)    85.0 IU/L    85 IU/L -1 1 -2.142857 0 55 0.0 
2 TAST      AST (SGOT)    74.0 IU/L    74 IU/L -1 1 -2.142857 0 40 0.0 
3 TALB      Albumin    4.3 g/dL    43 g/L -1 1 -2.142857 36 48 3.6 
4 TALP   Alkaline Phosphatase    45.0 IU/L    45 IU/L -1 1 -2.142857 25 160 25.0 
5 AMMB    Ammonium Biurate None Seen  NaN  NoneSeen  NaN   -1 1 -2.142857 NaN NaN NaN 
6 AMURPH Amorphous Urates or Phosphates None Seen  NaN  NoneSeen  NaN   -1 1 -2.142857 NaN NaN NaN 

假設我有這個數據框及其命名實驗室。我想通過多個行值對它進行分組。例如,我只需要提取TEST值等於白蛋白或氨基酸銨的行。按值排列的數據框子集

D1 = subset(labs, labs$TEST == 'Albumin' & labs$TEST == 'Ammonium Biurate') 

然而,運行此代碼後,我得到一個數據幀與0對象?如何適當地在R中通過多個行條件進行子集?

D1 = subset(labs, labs$TEST == 'Ammonium Biurate' | labs$TEST == 'Albumin') 

D1 = subset(labs, labs$TEST %in% c('Ammonium Biurate, Albumin) 

編輯:感謝您對%in%的建議。 ==的使用將在TEST列中僅搜索矢量的模式。

+0

嘗試'%in%'而不是'==',即'子集(實驗室,%c('白蛋白','氨基酸'))' – akrun

+0

似乎沒有任何前導空格。 –

+0

我以爲你是基於兩列的子集。如果您只使用單個列,請在修改註釋時嘗試使用'%in%'。 – akrun

回答

1

正如上面提到的akrun,您的子集聲明與您提到的標準不符。

而是寫

D1 = subset(labs, labs$TEST == 'Albumin' & labs$TEST == 'Ammonium Biurate') 

D1 = subset(labs, labs$TEST == 'Albumin' | labs$TEST == 'Ammonium Biurate') 

你的版本是一個合乎邏輯的AND,這是從來沒有在你的情況屬實,因爲測試的值永遠都在同一時間。邏輯OR更接近你尋找的東西,即它是白蛋白或氨基酸銨,而不是兩者。注意:下次嘗試提供一個易於重現的示例。立即就您的問題立即測試一個想法更簡單。