【问题标题】:sqldf package catch rows in Rsqldf 包在 R 中捕获行
【发布时间】:2017-10-24 07:19:18
【问题描述】:

伙计们,我有一个问题,因为我输入了我的 excel 表作为数据框 我的数据如下所示

arr=as.data.frame(rbindlist(df,fill=T))
> arr
    ST Code Emp          Employee              Pay.Code Hours     Gross
1   AL 7229  65                 S                HOURLY  0.00      0.00
2   AL 7229  65                 S                SALARY  0.00   3060.00
3   AL 7229  65                 S              PER DIEM  0.00    765.00
4   AL 7229  65                 S EXPENSE REIMBURSEMENT  0.00     11.00
5   AL 7229   2                 R                HOURLY 60.00    720.00
6   CA   42   2                 R              OVERTIME  3.25     58.50
7   CA   42   3                 A                HOURLY 80.00    800.00
8   CA   42   3                 A              OVERTIME  6.25     93.75
9   CA   42   4                 N                HOURLY 79.25    990.63
10  CA   42   4                 N              OVERTIME  7.00    131.25
11  CA   42   9                 P                HOURLY 32.00    352.00
12  CA   42   9                 P              OVERTIME  1.75     28.88
13  CA   42  10                 E                HOURLY 72.00    864.00
14  CA   42  10                 E              OVERTIME  5.00     90.00
15 AL  7229  NA              <NA>                  <NA>    NA  23954.00
16 AL  7229  NA              <NA>                  <NA>    NA  11092.10
17  GA 7380  NA              <NA>                  <NA>    NA  98142.00
18  GA 8380  NA              <NA>                  <NA>    NA  11984.00
19  NC 7380  NA              <NA>                  <NA>    NA 218129.00
20  NC 8380  NA              <NA>                  <NA>    NA  27891.00
21  TN 7380  NA              <NA>                  <NA>    NA  28441.00
22  TN 8380  NA              <NA>                  <NA>    NA   8348.00

我用

outcome=sqldf("select * from arr where ST = 'AL'")
outcome

总是得到

 ST Code Emp          Employee              Pay.Code Hours Gross
1 AL 7229  65                S                HOURLY     0     0
2 AL 7229  65                S                SALARY     0  3060
3 AL 7229  65                S              PER DIEM     0   765
4 AL 7229  65                S EXPENSE REIMBURSEMENT     0    11
5 AL 7229   2                R                HOURLY    60   720

我总是抓不到 15 和 16 哪里出错了?

【问题讨论】:

  • 看来他们是"AL "(注意空格)。修复您的数据(首选)或制作更灵活的 sql 语句:select * from arr where ST like 'AL%'(未经测试)。
  • 感谢 r2evans 成功了!!

标签: r excel dataframe sqldf


【解决方案1】:

当我知道错误的模式时,我通常会尝试将之前的所有数据标准化。

在您的情况下,删除空格将解决问题。

arr$ST = strsplit(arr$ST," ")[[1]] arr$ST = arr$ST[arr$ST!=""]

但是如果你不知道错误的模式可以使用正则表达式,我不确定 sqldf 是否能够正则表达式模式(我以前从未使用过 sqldf,抱歉),但如果你可以使用正则表达式模式SQL 语言。

附言:

1 - 您可以使用 arr[which(arr$ST == "AL"),] 过滤不使用 sqldf 的数据

2 - 不要忘记在进行任何更改之前保存您的数据。

【讨论】:

  • 问题不是sqldf是否做正则表达式,而是SQL是否做正则表达式。这取决于sqldf 目前使用的数据库引擎。见stackoverflow.com/a/33029814/3358272。 (默认使用 SQLite 意味着没有可用的正则表达式。)
猜你喜欢
  • 2017-06-18
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 2012-01-03
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多