Tôi muốn lấy một số dữ liệu từ máy chủ sql với bộ lọc động. Tôi đang sử dụng dplyr gói R lớn theo cách sau:Đánh giá không chuẩn (NSE) trong bộ lọc của dplyr và kéo dữ liệu từ MySQL
#Create the filter
filter_criteria = ~ column1 %in% some_vector
#Connect to the database
connection <- src_mysql(dbname <- "mydbname",
user <- "myusername",
password <- "mypwd",
host <- "myhost")
#Get data
data <- connection %>%
tbl("mytable") %>% #Specify which table
filter_(.dots = filter_criteria) %>% #non standard evaluation filter
collect() #Pull data
Đoạn mã này hoạt động tốt nhưng bây giờ tôi muốn để lặp nó bằng cách nào đó trên tất cả các cột của bảng của tôi, vì vậy tôi muốn để viết bộ lọc dưới dạng:
#Dynamic filter
i <- 2 #With a loop on this i for instance
which_column <- paste0("column",i)
filter_criteria <- ~ which_column %in% some_vector
Và sau đó áp dụng lại mã đầu tiên với bộ lọc được cập nhật.
Rất tiếc, cách tiếp cận này không đưa ra kết quả mong đợi. Trong thực tế nó không đưa ra bất kỳ lỗi nào nhưng thậm chí không kéo bất kỳ kết quả nào vào R. Cụ thể, tôi đã xem xét một chút vào truy vấn SQL được tạo ra bởi hai đoạn mã và có một khác biệt quan trọng.
Trong khi người đầu tiên, làm việc, mã tạo ra một truy vấn có dạng:
SELECT ... FROM ... WHERE
`column1` IN ....
('đăng nhập tên cột), điều thứ hai sẽ tạo ra một truy vấn có dạng:
SELECT ... FROM ... WHERE
'column1' IN ....
('đăng nhập vào tên cột)
Có ai có bất kỳ gợi ý nào về cách xây dựng điều kiện lọc để làm cho nó hoạt động không?
Hey Matthew, cảm ơn bạn rất nhiều vì câu trả lời của bạn. Phương pháp đầu tiên bạn đề xuất giải quyết vấn đề của tôi, cảm ơn bạn !! Tôi đã đọc các họa tiết nse và đi rất gần với giải pháp này bản thân mình, nhưng tôi quên cuộc gọi as.name/as.symbol. Phương pháp thứ hai bạn đề nghị là không khả thi trong mã tôi đang viết vì không có dataframe trong R được nêu ra, bộ lọc phải hoạt động như WHERE clasue trong truy vấn sql được tạo ra và sau đó kéo dữ liệu. Đó là lý do tại sao tôi bao gồm các đề cập đến SQL trong tiêu đề và trong văn bản của câu hỏi. Cảm ơn bạn một lần nữa cho câu trả lời của bạn! –
Rất vui được! – Matthew
Bạn có thể giải thích những gì có thể được thực hiện nếu 1 cũng là một biến khác? một cái gì đó như filter_criteria <- interp (~ which_column == val123, which_column = as.name ("v1"), val123 = ???) Đây val123 là một số nguyên – qwerty123