sqldf包在R中捕获行

sqldf package catch rows in R

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

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 哪里出错了?

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

对于您的情况,删除空格即可解决问题。

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

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

Ps.:

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

在没有 sqldf 的情况下过滤数据

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