我正在嘗試使用dplyr計算data.frame中包含的變量的移動中位數。我遇到的問題是,我傳入rollapply()的函數與原始data.frame中的變量具有相同的名稱。例如:dplyr中的變量名衝突
df <- data.frame(median = seq(1:100))
df %>%
mutate(ln_median = log(median)) %>%
mutate(ln_median_10 = rollapply(ln_median, 5, median))
生成錯誤消息:
Error in eval(substitute(expr), envir, enclos) : '1:100' is not a function, character or symbol
根本原因是,在rollapply()中值解析爲在data.frame變量,而不是功能「中值」。我已經能夠解決這個問題用下面的代碼:
df %>% mutate(ln_median = log(median)) %>%
mutate(ln_median_10 = rollapply(ln_median, 5, function(a) median(a), fill = NA))
也就是說,是爲了被解釋爲data.frame中的變量壓制它包裹位機能。
是否有一個更優雅的方式來實現相同的事情?
我複製了你的代碼並得到了一個不同的錯誤:「列'ln_median_10'必須是長度100(行數)或者一個,而不是96」。我通過將'fill = NA'參數添加到'rollapply'來修復 – lebelinoz
哪個包是'rollapply'的?它是'動物園'嗎? – useR