2012-01-30 20 views
5

RODBC là thư viện chính trong R để nhập dữ liệu từ cơ sở dữ liệu vào R. RODBC dường như có khả năng "đoán" kiểu dữ liệu của cột mà tôi tìm thấy làm phiền.gây phiền nhiễu "tính năng" (hoặc lỗi?) Cho RODBC

Tôi đã tải lên một tập tin test.xlshere, hoặc bạn có thể tạo một tập tin xls mình:

  1. tạo 2 cột, cột đầu tiên mang tên col_a và cột thứ hai tên là col_b.
  2. loại bất cứ điều gì bạn thích trong col_a, tôi gõ chữ trên cột này cho 92 hàng
  3. ở hàng 92th của col_b, gõ số đó, tôi gõ "1923" mà không thay đổi kiểu dữ liệu (tức là không sử dụng ')
  4. cố gắng nhập file xls vào R sử dụng kịch bản sau đây:

library(RODBC) 

setwd("C:/Users/hke775/Documents/Enoch/MISC/R_problems/RODBC") 
channel <- odbcConnectExcel("test.xls",readOnly=TRUE) 
dummy.df <- sqlFetch(channel,"Sheet1") 
odbcClose(channel) 

Bạn sẽ thấy rằng trong dummy.df, col_b là tất cả NA, số 1923 trong cột này đã biến mất.

Nếu bạn muốn xem lại số 1923, bạn có thể thay đổi hàng đầu tiên là col_b thành một số và quay lại.

Điều này rất khó chịu vì tôi không thích sửa đổi dữ liệu theo cách thủ công. Tôi cần phải sử dụng gói khác để thực hiện việc nhập xls, nhưng tôi không thể tìm thấy các gói khác hoạt động trơn tru như RODBC (Tôi đã thử gdataxlsReadWrite).

Tôi có thiếu gì trong lệnh sqlFetch và gây ra sự cố không? Cảm ơn.

+0

Bạn có chắc chắn đã dùng thử gdata không? Khi tôi thử tệp thử nghiệm của bạn với gói gdata bằng cách sử dụng 'DF <- read.xls (" test.xls ")' nó đã hoạt động. '1923' đã có mặt. –

+0

Gdata cần phải có perl, mà tôi không thể cài đặt nó trong văn phòng của tôi – lokheart

+1

Nếu các quyền hạn có thể cài đặt R thì họ cũng nên cài đặt phân phối Rtools quá vì đó là yêu cầu cho R phát triển và có perl trong nó: http : //cran.r-project.org/bin/windows/Rtools/ –

Trả lời

8

Xin đừng đổ lỗi cho R hoặc RODBC cho Microsoft's bugs ...;)

Tuy nhiên, do một lỗi trong trình điều khiển ODBC, xác định dòng để Quét (MaxScanRows) thiết lập hiện không có tác dụng . Nói cách khác, trình điều khiển ODBC Excel ODBC (MDAC 2.1 trở lên) luôn quét 8 hàng đầu tiên trong nguồn dữ liệu được chỉ định để xác định loại dữ liệu của mỗi cột.

Để biết thêm thông tin về các dòng để quét lỗi, trong đó có một cách giải quyết đơn giản , nhấp vào số bài viết dưới đây để xem bài viết trong cơ sở kiến ​​thức Microsoft:

189897 XL97: Dữ liệu rút gọn đến 255 ký tự có Trình điều khiển ODBC Excel

Tôi đã thử sửa lỗi trong KB189897 bằng cách đặt giá trị TypeGuessRows thành 0 và xem điều gì sẽ xảy ra!

> library(RODBC) 
> channel <- odbcConnectExcel("test.xls",readOnly=TRUE) 
> tail(dummy.df <- sqlFetch(channel,"Sheet1")) 
    col_a col_b 
87  c NA 
88  d NA 
89  e NA 
90  f NA 
91  g NA 
92  h 1923 
> odbcClose(channel) 

Vui lòng không bỏ phiếu hoặc đánh dấu ... chỉ cần gửi tiền mặt.:)

+1

+1 không có phiếu bầu hoặc dấu kiểm ..! – agstudy

+0

Tuyệt vời. Nhưng sau đó chúng ta nên kết luận rằng một người dùng không có đặc quyền quản trị không có giải pháp? –

+0

đặt tốt hơn TypeGuessRows thành 24 hoặc bất kỳ cài đặt đủ sâu nào. Nhưng 0 sẽ thực hiện quét không giới hạn và sẽ ảnh hưởng đến peformance. (Tôi đang đọc hàng ngàn tệp .xls/.xlsx không có cấu trúc) – Langeleppel