首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在相同的查询中同时使用LIKE和NOT

在相同的查询中同时使用LIKE和NOT
EN

Stack Overflow用户
提问于 2015-09-21 21:13:43
回答 2查看 1.9K关注 0票数 1

我有一个像这样的df

代码语言:javascript
运行
复制
Category <- c('D_L','D_R','FA1','LBP0W','L-010','L-020','LW_-010','LWA_PT_035','LWA_PT_055','RBP0W','RET_MAG','R-010','R-000','RWA_PT_035','RWA_PT_055','TPH')
ID <- c(111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126)
df <- data.frame(ID,Category)
df

    ID   Category
1  111        D_L
2  112        D_R
3  113        FA1
4  114      LBP0W
5  115      L-010
6  116      L-020
7  117    LW_-010
8  118 LWA_PT_035
9  119 LWA_PT_055
10 120      RBP0W
11 121    RET_MAG
12 122      R-010
13 123      R-000
14 124 RWA_PT_035
15 125 RWA_PT_055
16 126        TPH

我使用sqldf将我的数据集过滤成2类。

代码语言:javascript
运行
复制
df_R <- sqldf("SELECT * FROM df 
                  WHERE Category NOT LIKE '%_L'
                  AND Category NOT LIKE 'LW_%'
                  AND category NOT LIKE 'L-%'
                  AND category NOT LIKE 'LB%'")

df_L <- sqldf("SELECT * FROM df 
              WHERE Category NOT LIKE '%_R'
              AND Category NOT LIKE 'RW_%'
              AND category NOT LIKE 'R-%'
              AND category NOT LIKE 'RB%'")

这里我得到了两个数据帧。挑战是:

1)对于df_R -我需要返回"RWA_PT_035“而不是"RWA_PT_055”类别2)的df_L -我需要返回"LWA_PT_035“而不是"LWA_PT_055”类别

所以当我尝试这样做的时候

代码语言:javascript
运行
复制
df_R <- sqldf("SELECT * FROM df 
                      WHERE Category NOT LIKE '%_L'
                      AND Category NOT LIKE 'LW_%'
                      AND Category NOT LIKE 'L-%'
                      AND Category NOT LIKE 'LB%'
                      AND Category LIKE 'RWA_PT_035'")

它只返回一个观测值,即df_R的“df_R”,但我想要的输出是

代码语言:javascript
运行
复制
   ID   Category
1 112        D_R
2 113        FA1
3 120      RBP0W
4 121    RET_MAG
5 122      R-010
6 123      R-000
7 124 RWA_PT_035
8 126        TPH

对于df_L

代码语言:javascript
运行
复制
    ID   Category
1  111        D_L
2  113        FA1
3  114      LBP0W
4  115      L-010
5  116      L-020
6  117    LW_-010
7  118 LWA_PT_035
8  121    RET_MAG
9 126        TPH

我想知道我是否可以在查询中同时使用“喜欢”和“不喜欢”,就像上面这样?或者有其他方法可以做到吗?

我还可以使用其他方法,如data.table或dplyr,而不是sqldf。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-22 12:54:30

我从大卫·阿伦堡那里得到了答案

代码语言:javascript
运行
复制
df[!grepl("_R|RWA_|R-|RB|_PT_055", df$Category),]
票数 2
EN

Stack Overflow用户

发布于 2015-09-22 13:18:59

使用sqldf复制@DavidArenburg解决方案

代码语言:javascript
运行
复制
#Using @DavidArenburg solution:
res1 <- df[!grepl("_R|RWA_|R-|RB|_PT_055", df$Category),]

#Using sqldf
library(sqldf)
res2 <- sqldf("SELECT * FROM df 
               WHERE Category NOT LIKE '%_R' AND
                     Category NOT LIKE 'RWA_%' AND
                     Category NOT LIKE 'R-%' AND
                     Category NOT LIKE 'RB%' AND
                     Category NOT LIKE '%_PT_055'")

# res1 == res2
#      ID Category
# 1  TRUE     TRUE
# 3  TRUE     TRUE
# 4  TRUE     TRUE
# 5  TRUE     TRUE
# 6  TRUE     TRUE
# 7  TRUE     TRUE
# 8  TRUE     TRUE
# 11 TRUE     TRUE
# 16 TRUE     TRUE
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32704666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档