我正在处理家庭关系数据集,每个人都有一行,描述潜在关系的列(有父亲列,母亲列,配偶列等)。我遇到问题的列是列出给定个体的子代的列。我将这些列作为标题为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_at
中ifelse
的使用有关。有没有更好的方法来获得我想要的结果?
(以上是我函数的缩写版本;在mutate函数中我还有其他ifelse语句可以提供其他关系,但是这些不依赖filter_at且运行良好。)