如何使用subset函数中的运算符删除R中的记录?

如何使用subset函数中的运算符删除R中的记录?,r,dataframe,subset,R,Dataframe,Subset,我有如下所示的数据帧 test_df <- data.frame("SN" = c(1,2,3,4,5), "code" = c("ABC","DEF","GHI","JKL","MNO"), "Name" = c("John","Dora","Raja","Poda","Podi")) test_df您可以在各种条件下使用和尝试以下操作: sub_df <- test_df[test_df$SN!=1 & !(test_df$code %in% c("GHI","MNO"

我有如下所示的数据帧

test_df <- data.frame("SN" = c(1,2,3,4,5), "code" = c("ABC","DEF","GHI","JKL","MNO"), "Name" = c("John","Dora","Raja","Poda","Podi"))

test_df您可以在各种条件下使用
尝试以下操作:

sub_df <- test_df[test_df$SN!=1 & !(test_df$code %in% c("GHI","MNO")) & !(test_df$Name %in% c("Poda")), ]

sub_df鉴于您的预期输出,您应该使用
&
而不是

下面是一个
数据。表
解决方案

代码

require(data.table); setDT(test_df)

restr = quote(SN != 1 & !(code %in% c('GHI', 'MNO')) & !(Name %in% c("Poda"))) #Define your restrictions

df = test_df[eval(restr)] # Apply restrictions
结果

> df
   SN code Name
1:  2  DEF Dora

看起来您希望所有条件都是
TRUE
,因此只需将
替换为
&
sub\df您还可以直接应用限制来代替
eval(rest)
test\u df[eval(rest)]
,即
df=test\df[SN!=1&!(code%在%c('GHI','o'))和!(Name%在%c('Poda'))
。我只想单独声明这些限制性的清洁。它是否考虑了<代码> PODA <代码>,类似于操作符模式,或者它希望看到完整的字符串?在我的例子中,“PODA”是一个完整的字符串。但如果您想将其用作模式,例如,如果您有包含“Poda”的模式,那么您可以将您的条件设置为
!grepl(“*?Poda.*”,test_df$Name)
,它应用regexp过滤掉@SSMK的元素
> df
   SN code Name
1:  2  DEF Dora