在dplyr :: summarize中使用数据的函数

时间:2016-04-15 13:06:06

标签: r dplyr

假设我有一个data.frame的函数,它返回一个数字,现在我想使用summarise中的dplyr,其中新变量应该是应用于数据的函数.frame由另一个变量分组。

这是一个愚蠢的例子

df <- data.frame(id=rep(c("A","B"),each=5),diff=rnorm(10))

func<-function(data){
  mean(data$diff)
}

我知道使用summarise(Mean = mean(diff))可以轻松完成此示例,但这些要点并不是解决此示例,而是通常使用带有data.frame函数的summarise

到目前为止我的尝试一直是

df %>% group_by(id) %>% summarise(New = func(.))

但它为每个组提供相同的值,这是整体功能。

希望一切都清楚。

2 个答案:

答案 0 :(得分:3)

我不确定我理解您要做什么,而且我不熟悉 DataReadRequest readRequest = new DataReadRequest.Builder() .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) .read(DataType.AGGREGATE_STEP_COUNT_DELTA) .enableServerQueries() .build(); plyr软件包之间的差异。做我认为你尝试做的最直接的方法是使用dplyr

daply

答案 1 :(得分:3)

As akrun pointed out in the comments, you can do this using do in dplyr:

df %>% group_by(id) %>% do(data.frame(New=func(.)))

You can also add other variables, though you have to use .$:

df %>% group_by(id) %>% do(data.frame(New=func(.), SmthElse = sd(.$diff)))
#  id        New  SmthElse
#1  A  0.1934552 1.0932424
#2  B -0.4161216 0.4841031

That said, the simpler and faster performance solution is using data.table:

library(data.table)
dt = as.data.table(df) # or convert in place using setDT

dt[, .(New = func(.SD), SmthElse = sd(diff)), by = id]
#   id        New  SmthElse
#1:  A  0.1934552 1.0932424
#2:  B -0.4161216 0.4841031