为什么ifelse中的filter_at不起作用?

时间:2018-09-17 18:27:36

标签: r if-statement filter dplyr mutate

我正在处理家庭关系数据集,每个人都有一行,描述潜在关系的列(有父亲列,母亲列,配偶列等)。我遇到问题的列是列出给定个体的子代的列。我将这些列作为标题为child1,child2等的列。

我希望我创建的函数的最终结果是一个较小的数据集,该数据集显示以特定个体为中心的家庭关系。由于“子”列是我遇到的困难,因此我将重点放在关系列中将包含“父”的行。

我有一些代码,可以过滤以查找数据集中任何人的父母,当我在函数外使用它时,一切正常。它给了我任何一个用我的名字代替name的个人的父母,无论该个人位于哪个子列中。

dataset %>%
    filter_at(vars(matches("^child\\d+$")), any_vars(. == name))

当我尝试将此代码应用于函数时,就会出现问题。我收到以下错误消息:Error in mutate_impl(.data, dots) : Evaluation error: no applicable method for 'tbl_vars' applied to an object of class "quosures".

test_function <- function(name, dataset) {
    exact_name <- paste("^", name, "$", sep = "")
    family_data <- data.frame(
        dataset %>%
            mutate(relationship = ifelse(
                filter_at(vars(matches("^child\\d+$")), any_vars(. == exact_name)), 
                "parent", 
                "other"
            )) %>%
            filter(relationship != other))
}

我猜想这与filter_atifelse的使用有关。有没有更好的方法来获得我想要的结果?

(以上是我函数的缩写版本;在mutate函数中我还有其他ifelse语句可以提供其他关系,但是这些不依赖filter_at且运行良好。)

0 个答案:

没有答案