如何在R中同时grep两个术语

Seb*_*eki 3 r

我有一个数据帧如下

chr     Type
1     Tum,B,B,Tum
2     B,B
3     Tum,Tum
4     B,B,B,Tum
Run Code Online (Sandbox Code Playgroud)

我想只选择那些将BOTH Tum和B插入到新数据帧中的行,结果如下:

chr     Type
    1     Tum,B,B,Tum
    4     B,B,B,Tum
Run Code Online (Sandbox Code Playgroud)

我尝试了以下内容

PusungMix <- as.data.frame(Pusung[grep("Barr"&"Tum", Pusung$Type])
Run Code Online (Sandbox Code Playgroud)

但我得到了错误

Error in "Barr" & "Tum" : 
  operations are possible only for numeric, logical or complex types
Run Code Online (Sandbox Code Playgroud)

akr*_*run 5

我们可以使用double grepl来创建两个逻辑索引,并检查两者是否都为TRUE的实例&.这可用于对'df1'行进行子集化.

 indx <- grepl('B', df1$Type) & grepl('Tum', df1$Type)
 df1[indx,]
 #  chr        Type
 #1   1 Tum,B,B,Tum
 #4   4   B,B,B,Tum
Run Code Online (Sandbox Code Playgroud)

或者正如@Gaurav在评论中建议的那样,subset如果我们不想使用,则是另一种选择[.我们可以去除df1$subset,也不必担心掉落的尺寸drop=FALSE是默认subset,而在[,它是drop=TRUE.所以,当我们有一个单一的列或单列,它将丢弃尺寸的vector,如果我们没有明确指定drop=FALSE[.

 subset(df,grepl('B', Type) & grepl('Tum', Type))
Run Code Online (Sandbox Code Playgroud)