我正在处理数据集(来自智能手机体验抽样),我必须经常执行分组操作(例如在每个人中找到度量的可变性,或者在每个人的每一天内等等)。典型的代码可能看起来像下面的代码,它计算一些变量的日内变化,然后采用日内变化的平均值并将其与原始数据相连。
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管道不能像我输入的那样将变量作为字符向量。
编辑:我错了 - 下面的代码确实有效,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)))
答案 0 :(得分:1)
使用mutate_at
,您只需将列的名称作为向量提供:
mtcars %>% mutate_at(c("mpg", "hp"), funs(mean))
这应该可以解决问题。