我正在尝试在dplyr管道中使用条件的lead
/lag
函数,使用ifelse却出现了错误。然而,在管道之外使用相同的方法似乎可以工作。我错过了什么?
require(dplyr)
数据:
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)
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
没有管道时它可以正常工作:
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))
我发现一些迹象表明,在使用分组数据框时,dplyr的lead
/lag
存在问题。但是我这里没有进行分组。
版本信息:R 3.1.1和dplyr_0.4.1。
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))
能够生效? - David Arenburgdplyr
的一个 bug。 - Randy Laigroup_by(cyl)
,也会生成错误)。 - Henrik