首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式选择要放入dplyr管道中的变量

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

Stack Overflow用户
提问于 2017-05-16 06:33:37
回答 1查看 281关注 0票数 0

我正在使用数据集(来自智能手机经验抽样),在这里,我必须非常频繁地执行分组操作(例如,在每个人内部,或者在每个人内部的每一天内,查找度量的可变性,等等)。典型的代码可能类似于下面的代码,该代码计算一些变量的日内可变性,然后取日内可变性的平均值并将其加入原始数据。

代码语言:javascript
复制
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,我可以在字符串中的变量名向量上调用这段代码(以及将其保存为不同函数的细微变化)。因此,所需的功能是:

代码语言:javascript
复制
vars <- c('angr', 'sad', 'guil', 'anx', 'hap')

output <- myfunc(vars)

其中myfunc执行上面的管道操作。

我知道,对于使用dplyr的非标准评估,有一个小片段,但是它是非常有限的,并且没有涵盖变异或者我对这个用例所需要做的大部分事情,所以非常感谢您的任何见解。

可重复的例子-我想要的基本上是下面的代码工作,但目前的dplyr管道不能将var作为字符向量的方式,我已经输入它。

编辑:我弄错了--下面的代码确实有效,dplyr可以以这种方式工作(也可以将字符向量带到group_by,这样便于编程)。我将下面的代码作为(工作)参考。

代码语言:javascript
复制
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))) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-16 06:50:30

使用mutate_at,您可以简单地将列的名称作为向量提供:

代码语言:javascript
复制
mtcars %>% mutate_at(c("mpg", "hp"), funs(mean))

这应该能起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43994025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档