Tôi đã đăng sự cố trên dplyr github page. Tôi có thể tái tạo các kết quả bằng cách sử dụng mã bên dưới. Nó có liên quan đến việc liệu csv có chứa một cột của rownames mà không có tiêu đề hay không. read_csv
và read.csv
xử lý sự khác biệt này, do đó tạo ra các kết quả khác nhau với filter
.
Đầu tiên là trường hợp khi nó hoạt động
write_csv
để read_csv
hoặc read.csv
; cả hai làm việc tốt với filter
library(readr)
library(dplyr)
mtcars %>% write_csv("~/Desktop/test.csv")
test_r <- read_csv("~/Desktop/test.csv") %>% filter(hp>100)
test.r <- read.csv("~/Desktop/test.csv") %>% filter(hp>100)
Bây giờ khi nó không thành công
Khi csv được tạo ra thông qua một quá trình như write.csv
, trừ khi người đó thay đổi mặc định của row.names
-FALSE
, nó giới thiệu một cột của rownames w/oa header. Khi đọc dữ liệu trở lại, read_csv
không điền vào tiêu đề có tên là, nhưng read.csv
làm xáo trộn X. Vì vậy, khi filter
hoạt động trên read.csv
nhập, nó có tất cả tiêu đề có ô đầy, nhưng filter
sau read_csv
có tiêu đề trống tế bào ít nhất là nơi có tên gọi.
Các mã sau đây nên lỗi sau test1_r %>% filter(hp>100)
với các lỗi sau
Error in filter_impl(.data, dots) :
attempt to use zero-length variable name
Một lần nữa, sự khác biệt lớn là cách write.csv tạo ra csv.
mtcars %>% write.csv("~/Desktop/test1.csv")
test1_r <- read_csv("~/Desktop/test1.csv")
test1_r %>% str()
#should fail here
test1_r %>% filter(hp>100)
test1.r <- read.csv("~/Desktop/test1.csv")
test1.r %>% str()
test1.r %>% filter(hp>100)
Để giải quyết vấn đề, bạn có thể sử dụng read.csv
như đã đề cập ở trên bởi @hackR.Hoặc bạn có thể tập hợp con ra cột đầu tiên khi bạn biết csv cư xử như thế này:
test1_r <- read_csv("~/Desktop/test1.csv")[-1]
Hoặc, nếu bạn đang ở trong kiểm soát của bước csv sáng tạo, bạn có thể thêm tùy chọn row.names=FALSE
-write.csv
mtcars %>% write.csv("~/Desktop/test2.csv", row.names = FALSE)
test2.r <- read_csv("~/Desktop/test2.csv")
test2.r %>% str()
test2.r%>% filter(hp>100)
hoặc sử dụng write_csv
như được hiển thị ở trên.
Hệ điều hành nào? Phiên bản R và RStudio nào (rõ ràng)? Bạn đã thiết lập tệp '.Rprofile' để tự động chạy mã khi khởi động chưa? Làm thế nào chính xác là các lệnh bỏ qua? Bạn có thấy lời nhắc tại bảng điều khiển không? – MrFlick