我想根据数据框中是否包含特定模式来删除数据框。例如,在下面的数据框中,我想删除包含(拦截),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
这只有在整个数据帧中序列相同的情况下才有效,这可能不一定是这种情况,因为这个数据帧是从一起生成的数据帧列表中创建的。
感谢。
答案 0 :(得分:2)
您可以使用grep
选择您想要/不想要的行:
dat[-grep("Intercept|iyeareducc|ibphdtdep|gender", rownames(dat)),]
grep
返回行名称至少包含一个搜索字符串的行的行号(每个字符串之间的|
表示" OR")。在grep
前加一个减号告诉R
只返回dat
未归还的grep
行。