【发布时间】:2019-09-23 02:15:27
【问题描述】:
定制函数内的 Dplyr 不评估列。
我花了几个小时找出代码中的问题。我有一个数据框(下面的示例),它有几列,并创建了下面的函数来传递数据框和列。目标是进行过滤和变异以进行线性插值。但是,该函数不读取参数列。
library(tidyverse)
library(imputeTS)
library(zoo)
dfm <- tbl_df(data.frame(country=rep('BGD', each=48), year=c(1970:2017),
STUNT=c(NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
70.9, NA, NA, NA, 63.4, 73.6, 71.5, 69.2, 67.3,
65.8, 63.8, 59.7, 59.3, 59.9, 50.8, 53.2, 51.4, 47.8,
50.5, 45.9, 45.1, 43.2,NA, NA, NA, 41.4, 42,
38.7, 36.1, NA, NA, NA, NA)))
vari = "STUNT"
data_impute<- function(data, vari) {
data %>%
select(country, year, paste0(vari)) %>%
group_by(country) %>%
filter(seq_along(vari) >= min(which(!is.na(vari))) &
seq_along(vari) <= max(which(!is.na(vari)))) %>%
mutate(vari= na.interpolation(vari, option="linear")) %>%
select(country, year, paste0(vari)) %>%
ungroup()
}
当使用数据执行函数时,它会给出带有字符串“STUNT”的 STUNT 列。我看到里面的 dplyr 操作没有评估从 group_by 到结束的列。我已经阅读了许多其他类似的帖子,但没有任何帮助。如果您能建议问题出在哪里,我将不胜感激。
【问题讨论】:
-
na.interpolation来自哪里?如果来自库,请在顶部包含,以便其他人可以运行您的代码。 -
您可以通过多种方式索引变量
(grep("vari", names(data))或which(names(data) == "vari")