根据条件删除选定的案例

时间:2014-11-11 00:05:22

标签: r dataframe subset

我想根据数据框中是否包含特定模式来删除数据框。例如,在下面的数据框中,我想删除包含(拦截),iyeareducc,ibphtdep和gender_R22的所有行(或者选择包含_carrier1或adri的行)。

                               OR        CI    P
apoee4_carrier.(Intercept)     1.96 0.97-3.94 0.06
apoee4_carrier.apoee4_carrier1 1.03 0.77-1.37 0.84
apoee4_carrier.iyeareducc      0.86  0.82-0.9 0.00
apoee4_carrier.ibphdtdep       1.01 0.96-1.05 0.81
apoee4_carrier.gender_R22      0.87 0.67-1.12 0.28
BDNF_carrier.(Intercept)       2.05 1.01-4.14 0.04
BDNF_carrier.BDNF_carrier1     0.87 0.66-1.14 0.33
BDNF_carrier.iyeareducc        0.86  0.82-0.9 0.00
BDNF_carrier.ibphdtdep         1.00 0.96-1.05 0.82
BDNF_carrier.gender_R22        0.87 0.67-1.12 0.28
adri.(Intercept)               1.60 0.78-3.31 0.20
adri.adri                      1.03    1-1.06 0.04
adri.iyeareducc                0.89 0.84-0.94 0.00
adri.ibphdtdep                 1.00 0.95-1.04 0.87
adri.gender_R22                0.87 0.67-1.12 0.27

虽然我可以使用序列来分组我需要的行,如此

dat[(seq(2,nrow(dat),5)),]
                                 OR        CI    P
apoee4_carrier.apoee4_carrier1 1.03 0.77-1.37 0.84
BDNF_carrier.BDNF_carrier1     0.87 0.66-1.14 0.33
adri.adri                      1.03    1-1.06 0.04

这只有在整个数据帧中序列相同的情况下才有效,这可能不一定是这种情况,因为这个数据帧是从一起生成的数据帧列表中创建的。

感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用grep选择您想要/不想要的行:

dat[-grep("Intercept|iyeareducc|ibphdtdep|gender", rownames(dat)),]

grep返回行名称至少包含一个搜索字符串的行的行号(每个字符串之间的|表示" OR")。在grep前加一个减号告诉R只返回dat未归还的grep行。