首页 文章

以编程方式选择要放入dplyr管道的变量

提问于
浏览
0

我正在处理数据集(来自智能手机体验抽样),我必须经常进行分组操作(例如在每个人中找到度量的可变性,或者在每个人的每一天内等等) . 典型的代码可能看起来像下面的代码,它计算一些变量的日内变化,然后采用日内变化的平均值并将其与原始数据相连 .

output <- group_by(mydata, id, day) %>%
  mutate_at(vars(angr, sad, guil, anx, hap), funs(sd(., na.rm = TRUE))) %>%
  ungroup() %>%
  group_by(id) %>%
  summarize_at(vars(angr, sad, guil, anx, hap), funs('var_day_mean' = mean(., na.rm = TRUE))) %>%
  join(mydata, .)

我想要做的是能够将其保存为一个函数,以便不必多次输出 angr, sad, guil, anx, hap ,我可以在变量名称向量上调用此代码(并将其保存为不同的函数)一个字符串 . 所以所需的功能是:

vars <- c('angr', 'sad', 'guil', 'anx', 'hap')

output <- myfunc(vars)

myfunc执行上面的管道操作 .

我知道使用dplyr进行非标准评估有一个小插图,但是它非常有限,并且不包括变异或我需要对此用例做的大部分内容,所以我们将不胜感激 .

可重复的例子 - 我想要的基本上是下面的代码工作,但是目前dplyr管道不能像我输入它那样将vars作为字符向量 .

编辑:我错了 - 下面的代码确实有效,并且dplyr可以以这种方式运行(并且还可以将字符向量带到group_by,使其易于编程) . 我将下面的代码留作(工作)参考 .

data <- data.frame('ID' = rep(1:10, each = 10), 
                   'day' = rep(c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2), 10), 
                   'anx' = rnorm(100), 'sad' = rnorm(100), 'hap' = rnorm(100))

vars = c('anx', 'sad', 'hap')

out <- group_by(data, ID, day) %>%
  mutate_at(vars, funs(sd(., na.rm = TRUE)))

1 回答

  • 1

    使用 mutate_at ,您只需将列的名称作为向量提供:

    mtcars %>% mutate_at(c("mpg", "hp"), funs(mean))
    

    这应该可以解决问题 .

相关问题