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 - 不要忘记在进行任何更改之前保存您的数据。
伙计们,我有一个问题,因为我输入了我的 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"),]
2 - 不要忘记在进行任何更改之前保存您的数据。