我正在使用数据集(来自智能手机经验抽样),在这里,我必须非常频繁地执行分组操作(例如,在每个人内部,或者在每个人内部的每一天内,查找度量的可变性,等等)。典型的代码可能类似于下面的代码,该代码计算一些变量的日内可变性,然后取日内可变性的平均值并将其加入原始数据。
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管道不能将var作为字符向量的方式,我已经输入它。
编辑:我弄错了--下面的代码确实有效,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))) 发布于 2017-05-16 06:50:30
使用mutate_at,您可以简单地将列的名称作为向量提供:
mtcars %>% mutate_at(c("mpg", "hp"), funs(mean))这应该能起作用。
https://stackoverflow.com/questions/43994025
复制相似问题