簡體   English   中英

在dplyr :: summarise中使用數據的功能

[英]Use a function of the data in dplyr::summarise

假設我有一個data.frame賦予一個號碼后面的功能,現在我想用在summarisedplyr在新的變量應適用於由另一個變量分組的data.frame此功能。

這是一個愚蠢的例子

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

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

我知道這個例子是使用容易進行summarise(Mean = mean(diff))但點不解決這個例子,但在一般的使用summarise與data.frame的功能

到目前為止,我的嘗試是

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

但每個組的值都相同,這是整體功能。

希望一切都清楚。

我不確定我了解您要做什么,並且我不熟悉plyrdplyr軟件包之間的plyr 我認為您要嘗試執行的最直接的方法是使用daply

> daply(df, .(id), func)
         A          B 
-0.0301488  0.2088815

正如akrun在評論中指出的那樣,您可以使用dplyr do來執行此do

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

您還可以添加其他變量,盡管必須使用.$

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

也就是說,更簡單,更快速的性能解決方案是使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM