1

ROBDC を使用して Excel シートを R に読み込んでいます。しかし、私はいくつかの奇妙な結果に遭遇しました。場合によっては、R コンソールを再起動すると改善することがありますが、現在 3 回試行しましたが、次のバグ (?) が残っています。

Excel シートには、配列に読み込みたい数値のブロックが含まれています。

これは私のsqlQueryです:

channel <- odbcConnectExcel(paste("~link to file~"))
as.matrix(sqlQuery(channel,paste("select F13,F14,F15 from \"",land,i,"$\"",sep="")))

結果(の一部)は次のとおりです。

32 NA             NA             NA   
33 NA             NA             "Pf7"
34 "2.079975e+02" "6.762166e+01" NA   
35 "1.721265e+02" "5.595971e+01" NA   
36 "1.373673e+02" "4.465921e+01" NA   
37 "1.200835e+02" "3.904013e+01" NA   
38 "1.411489e+02" "4.588864e+01" NA   
39 NA             NA             NA   
40 NA             NA             NA   
41 NA             NA             NA   
42 NA             NA             "Pf7"
43 "1.443768e+00" "4.693807e-01" NA   
44 "1.194778e+00" "3.884318e-01" NA   
45 "9.535044e-01" "3.099920e-01" NA   
46 "8.335332e-01" "2.709883e-01" NA   
47 "9.797535e-01" "3.185257e-01" NA   
48 NA             NA             NA   
49 NA             NA             NA   

Excel シートでは、数字のすべてのブロックの前に Pf5:Pf7 があり、すべての説明 Pf5:Pf7 の後に 5 つの数字が続きます。すべてのセルは数値としてフォーマットされます。Excelシートはこちらからダウンロードできます。

F13 列と F14 列では、RODBC は説明を省略し (これは奇妙ですが、私には問題ありません)、F15 列では数値を省略します (これはまったく問題ありません!)。

奇妙なことに、昨日はまったく同じコードが正常に機能し、R ファイルを更新したり、Excel シートを変更したりしていないため、エラーの原因について困惑しています。

役に立つかもしれないコメントに感謝します。

ありがとう、マーティン

更新: odbcConnectExcel の代わりに odbcConnectExcel2007 を使用してみました。結果は次のとおりです。

22 NA             NA             NA             
23 NA             NA             NA             
24 NA             NA             "Pf7"          
25 "7.730711e+01" "1.958429e+01" "12,638675305" 
26 "4.126044e+01" "1.045255e+01" "6,7455279987" 
27 "4.293419e+01" "1.087656e+01" "7,0191635751" 
28 "4.278764e+01" "1.083944e+01" "6,9952057822" 
29 "4.073317e+01" "1.031897e+01" "6,6593269202" 
30 NA             NA             NA             
31 NA             NA             NA             
32 NA             NA             NA             
33 NA             NA             "Pf7"          
34 "9.001111e+01" "2.280260e+01" "14,715610176" 
35 "4.804083e+01" "1.217023e+01" "7,854032014"  
36 "4.998963e+01" "1.266392e+01" "8,1726345871" 
37 "4.981901e+01" "1.262070e+01" "8,1447397695" 
38 "4.742692e+01" "1.201471e+01" "7,7536653665" 
39 NA             NA             NA             
40 NA             NA             NA             

「。」の代わりに「、」ドイツ語版の Excel を使用していることが原因である可能性があります。sub() を使用してコンマを置き換えることもできますが、これは (1) 洗練された解決策ではなく、(2) 最初の 2 つの列では機能するが 3 番目の列では機能しない理由を説明していません。(また、昨日は機能したが、今日は機能しなかった理由でもありません...)

4

3 に答える 3

1

Excelファイルを見てください。セルの内容は実際に数字ですか?(数式バーを見ると'123、セルの内容が数値ではなく文字列であることがわかります。)

たとえば、パッケージread.xlsでの使用を検討することもできます。xlsReadWriteSQLクエリを使用するよりも少し簡単です。(同様に、 Excel 2007以降read.xlsxxlsxパッケージに含まれています。)

于 2011-04-18T13:27:44.843 に答える
1

as.matrix列のデータ型が異なる可能性のあるデータフレームには使用しないでください。

コードは自己完結型ではありませんが、コードを理解可能で再現可能なものに分解すると、何が起こっているのかがかなり明白になるはずです。

質問で提供されたzip内のファイル「test2.xls」を使用します。

library(RODBC)
d <- sqlQuery(con, "SELECT [F13], [F14], [F15] FROM [Wien2008$]")
con <- odbcConnectExcel("test2.xls")
summary(d)
    F13                 F14              F15    
Min.   :6.584e-01   Min.   :1.668e-01   Pf7 : 6  
1st Qu.:4.073e+01   1st Qu.:5.744e+00   NA's:61  
Median :7.731e+01   Median :1.262e+01            
Mean   :2.108e+03   Mean   :1.027e+04            
3rd Qu.:2.322e+02   3rd Qu.:4.738e+01            
Max.   :5.697e+04   Max.   :2.791e+05            
NA's   :3.000e+01   NA's   :3.400e+01            

F13F14私には数字のように見えます。

sapply(d, class)
     F13       F14       F15 
"numeric" "numeric"  "factor" 

その構造をすべてゴミ箱に捨てるとどうなりas.matrixますか?

mode(as.matrix(d))
[1] "character"

古いデータフレームに対してこれを行うとどうなりますか?

mode(as.matrix(data.frame(x = rnorm(10), y = letters[1:10], stringsAsFactors = FALSE)))
[1] "character"
mode(as.matrix(data.frame(x = rnorm(10), y = factor(letters[1:10]))))
[1] "character"
mode(as.matrix(data.frame(x = rnorm(10), y = 1:10)))
[1] "numeric"

数値と文字または係数の列がある場合、行列は文字に強制変換されます。

これは、とはまったく関係ありませんRODBC

于 2011-04-19T09:05:07.227 に答える
0

R-2.13.0 と RODBC_1.3-2 を使用して問題を再現できません。

> channel <- odbcConnectExcel("C:/test2.xls")
> (foo <- sqlQuery(channel, 'select F13, F14, F15 from "Wien2008$"'))
            F13          F14        F15
22           NA           NA         NA
23           NA           NA         NA
24           NA           NA         NA
25 7.730711e+01 1.958429e+01 12.6386753
26 4.126044e+01 1.045255e+01  6.7455280
27 4.293419e+01 1.087656e+01  7.0191636
28 4.278764e+01 1.083944e+01  6.9952058
29 4.073317e+01 1.031897e+01  6.6593269
> sessionInfo()
R version 2.13.0 (2011-04-13)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] RODBC_1.3-2

loaded via a namespace (and not attached):
[1] tools_2.13.0

問題を再現できないため、どうすればよいかわかりません... R ファイルを更新していないとおっしゃっています。プログラムを何も変更していないということですか?R インストールをアップグレードしたか、パッケージをアップグレードしましたか?

于 2011-04-18T14:17:17.323 に答える