使用自定义函数期望带有mutate和group_by的向量

时间:2018-03-29 23:13:02

标签: r dplyr

我想运行一个自定义函数,该函数使用按组拆分的数据框的特定列。这是我的样本数据&功能代码:

power.sequential(d = .5,
                 nseq = c(12,12,24),
                 pseq = c(.125,.125,.025))

现在我想在我的数据帧中的每个组上运行此函数。这就是函数正常调用的方式:

my_data %>% group_by(group) %>%
  mutate(result = power.sequential(d=.5,nseq=N,pseq=p))

该函数返回两个值,理想情况下,它们将保存在我的数据帧的单独列中。 这是我最好的尝试,但它给出了一条错误消息:

group power meanN
 dogs  .94   20.28
 cats  .95   27.36

我可能需要重塑我的数据帧,以便每个组都是一行,但我仍然坚持如何继续。

这是我想要的输出,该函数输出两个值(power和meanN),每个值都应该有自己的列。

{{1}}

2 个答案:

答案 0 :(得分:1)

你可以这样做:

my_data %>%
 group_by(group) %>%
 do(data.frame(power.sequential(d=.5,nseq=.$N,pseq=.$p)[c(1, 2)])) %>%
 data.frame()

这给出了:

  group power mean_N
1  cats  0.96  27.24
2  dogs  0.94  21.12

答案 1 :(得分:1)

使用data.table可以简化任务。可以直接调用' j`部分中的函数,这两个值将显示为单独的列。

library(data.table)

setDT(my_data)
set.seed(1)
my_data[,power.sequential(0.5, N, p), by=group]

# group power mean_N
# 1:  dogs  0.90  24.48
# 2:  cats  0.94  27.72

注意set.seed(1)已用于保持结果一致。