[英]Use a function of the data in dplyr::summarise
假設我有一個data.frame賦予一個號碼后面的功能,現在我想用在summarise
中dplyr
在新的變量應適用於由另一個變量分組的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(.))
但每個組的值都相同,這是整體功能。
希望一切都清楚。
我不確定我了解您要做什么,並且我不熟悉plyr
和dplyr
軟件包之間的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.