gpt4 book ai didi

R: dplyr 管道条件超前/滞后使用 ifelse 具有意外行为

转载 作者:行者123 更新时间:2023-12-02 08:51:56 25 4
gpt4 key购买 nike

我尝试使用 ifelse 在 dplyr 管道中使用条件 lead/lag 函数,但出现错误。然而,在管道外使用相同的方法似乎是有效的。我缺少什么?

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。

最佳答案

这个:

test %>%
mutate(delta = ifelse(a=="s",b+lag(b,n=12),
ifelse(a=="m",b+lag(b,n=6),0)))

有效。这意味着您不能在 lag 参数中传递表达式。

关于R: dplyr 管道条件超前/滞后使用 ifelse 具有意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29818171/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com