sqldf包捕获R中的行

时间:2017-10-23 22:39:55

标签: r excel dataframe sqldf

伙计们,我有一个问题,因为我输入我的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&amp; 16 哪里出错了?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

PS:

1 - 您可以使用arr[which(arr$ST == "AL"),]

过滤没有sqldf的数据

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