我有一个数据帧如下
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)
我们可以使用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)