Tôi đang cố sử dụng hàm có điều kiện lead
/lag
trong ống dplyr bằng ifelse nhưng gặp lỗi. Tuy nhiên, sử dụng cách tiếp cận tương tự bên ngoài đường ống có vẻ như nó hoạt động. Tôi đang thiếu gì?R: dplyr đường dẫn có điều kiện dẫn/trễ sử dụng ifelse với hành vi bất ngờ
require(dplyr)
dữ liệu:
test <- data.frame(a = c("b","b","b","b","b","b",
"m","m","m","m","m","m",
"s","s","s","s","s","s"),
b = replicate(1,n=18),
stringsAsFactors=F)
ống dplyr:
test %>%
mutate(delta = ifelse(a == "s", b + lag(b, n = 2*6),
ifelse(a == "m", b + lag(b, n = 1*6), 0)))
# Error: could not convert second argument to an integer. type=LANGSXP, length = 3
Nếu không có ống hoạt động:
test$delta <- ifelse(test$a == "s", test$b + lag(test$b, n = 2*6),
ifelse(test$a == "m", test$b + lag(test$b, n = 1*6), 0))
Tôi tìm thấy một số dấu hiệu cho thấy có một vấn đề với dplyr lead
/lag
kết hợp với các khung dữ liệu được nhóm. Nhưng tôi không nhóm ở đây.
Thông tin phiên bản: R 3.1.1 và dplyr_0.4.1.
Nếu vậy, tại sao 'ifelse (kiểm tra $ a == "s", kiểm tra $ b + lag (kiểm tra $ b, n = 2 * 6), ifelse (thử nghiệm $ a == "m", kiểm tra $ b + lag (kiểm tra $ b, n = 1 * 6), 0)) 'hoạt động? –
nó giống như một lỗi 'dplyr'. –
Điều này liên quan đến việc đánh giá các biểu thức. Trong mã này, tất cả các biểu thức được đánh giá trong môi trường toàn cầu, trong trường hợp dplyr, việc đánh giá diễn ra trong môi trường khác nhau. Đây có lẽ là một lỗi trong dplyr. – mpiktas