【问题标题】:Remove selected cases based on a criteria根据条件删除选定的案例
【发布时间】:2014-11-11 00:05:21
【问题描述】:

我想根据案例是否包含特定模式从数据框中删除案例。例如,在下面的数据框中,我想删除所有包含 (Intercept)、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

这仅在整个数据帧中的序列相同时才有效,这可能不一定是这种情况,因为此数据帧是从已被 rbind 在一起的数据帧列表创建的。

谢谢。

【问题讨论】:

    标签: r dataframe subset


    【解决方案1】:

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

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

    grep 返回行名至少包含一个搜索字符串的行的行号(每个字符串之间的| 表示“或”)。在grep 前面加上一个减号告诉R 只返回dat 中未被grep 返回的行。

    【讨论】:

      猜你喜欢
      • 2014-06-28
      • 1970-01-01
      • 2018-03-03
      • 2021-02-21
      • 1970-01-01
      • 2014-03-14
      相关资源
      最近更新 更多