簡體   English   中英

R中的分組匯總表

[英]Summary table by group in R

考慮以下數據幀:

 df <- data.frame(group = c("group1", "group1", "group2", "group2", "group2", "group3"), factor = paste("factor", 1:6, sep=""), vol = seq(from = 0.02, length.out = 6, by = 0.02))

第一列為第二列中的每個因子定義頂級組。 第三列是每個因子的標准偏差值。

我想生成一個僅包含組的匯總表,每個組的標准偏差定義為:

  • 如果group1反對因子f1和f2,vol(f1)和vol(f2)分別是因子f1和f2的標准偏差,則group1的標准偏差為:

    std(group1) = sqrt[vol(f1)^2 + vol(f2)^2]

有沒有簡單的方法來創建匯總表,其中每個組的vol是使用此自定義函數計算的?

任何幫助,將不勝感激! 謝謝。

我可以使用ddply函數提出解決方案:

# require(plyr)
ddply(df, .(group), summarize, std = sqrt(sum(vol^2)))

#    group        std
# 1 group1 0.04472136
# 2 group2 0.14142136
# 3 group3 0.12000000

良好衡量的基礎解決方案。

by(df,df$group,function(x) sqrt(sum(x$vol^2)))

如果你需要它看起來更漂亮:

as.table(df,df$group,function(x) sqrt(sum(x$vol^2))))

df$group
    group1     group2     group3 
0.04472136 0.14142136 0.12000000 

使用令人驚嘆的新dplyr包,我認為這正是您正在尋找的:

require(dplyr)

df <- data.frame(group = c("group1", "group1", "group2", "group2", "group2", "group3"), 
                 factor = paste("factor", 1:6, sep=""), 
                 vol = seq(from = 0.02, length.out = 6, by = 0.02))

df %.% group_by(group) %.% summarise(grp_std=sqrt(sum(vol^2)))

# Source: local data frame [3 x 2]

#    group    std_dev
# 1 group1 0.04472136
# 2 group2 0.14142136
# 3 group3 0.12000000

使用%.%的鏈接語法需要一些習慣,但它變得非常直觀。 替代語法:

df_grouped <- group_by(df, group)

summarise(df_grouped, grp_std=sqrt(sum(vol^2)))

我可以從基本軟件包stats推薦aggregate() ,但您必須先定義一個新函數。

ss<-function(x){sqrt(sum(x^2))}
aggregate(vol~group,data=df,FUN=ss)

暫無
暫無

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

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