假设我有一个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(.))
但它为每个组提供相同的值,这是整体功能。
希望一切都清楚。
答案 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