按值排列的数据框子集
问题描述:
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列中仅搜索矢量的模式。
答
正如上面提到的akrun,您的子集声明与您提到的标准不符。
而是写
D1 = subset(labs, labs$TEST == 'Albumin' & labs$TEST == 'Ammonium Biurate')
写
D1 = subset(labs, labs$TEST == 'Albumin' | labs$TEST == 'Ammonium Biurate')
你的版本是一个合乎逻辑的AND,这是从来没有在你的情况属实,因为测试的值永远都在同一时间。逻辑OR更接近你寻找的东西,即它是白蛋白或氨基酸铵,而不是两者。注意:下次尝试提供一个易于重现的示例。立即就您的问题立即测试一个想法更简单。
尝试'%in%'而不是'==',即'子集(实验室,%c('白蛋白','氨基酸'))' – akrun
似乎没有任何前导空格。 –
我以为你是基于两列的子集。如果您只使用单个列,请在修改注释时尝试使用'%in%'。 – akrun