2016-07-26 6 views
1

この問題を解決する方法を理解できませんでした。誰も私が問題を整理するのを助けることができます。平均グループと範囲

私はdata.frame

Gender Age BMI 
Male  20 18 
Male  40 22 
Female 30 19 
Male  50 24 
Female 28 21 

以下のように私は、私はカットしdcast使用しようとしましたが、どのように私は理解できませんでした

Age Range Male-BMI-Average Female-BMI-Average 
0-25  ###     ### 
26-50  ###     ### 

を次のようにdata.frameを取得したいと思いき年齢の範囲内で異なる性別のグループの平均を取得する?

+1

最短の方法です:あなたはあなたの努力と可能性のあるエラーを公開し、SO、必要に応じて何かを提案します。 – statosdotcom

+0

私は次のように問題を解決できました。 ステップ1:サブセットMaleData ステップ2:MaleData ステップ3で使用CUT:MaleData のBMIに集約ステップ4:1 DATAFRAMEにマージそれら:FemaleData ステップ5でstep1- STEP3を繰り返し – Iqbal

答えて

0

私たちは「AgeRange」を作成するためにcutを使用し、data.tableからdcastと「ワイド」形式に変換し、これはdcastとしてdata.tableで、より簡単にすることができます(ここでは、我々はmeanとして指定)fun.aggregateを持っています。

library(data.table) 
dcast(setDT(df1)[, AgeRange := cut(Age, breaks = c(0, 25, 50), 
       labels = c("0-25", "26-50"))], 
       AgeRange~Gender, value.var = "BMI", mean) 
# AgeRange Female Male 
#1: 0-25 NaN 18 
#2: 26-50  20 23 

またはdplyrを使用して、我々はcutによって基「AgeRange」と「性別」の欄に「男性」と「女性」に該当する「BMI」のmeanとばかりsummariseを作成することができます。ここで

library(dplyr) 
df1 %>% 
    group_by(AgeRange = cut(Age, breaks = c(0, 25, 50), 
         labels = c("0-25", "26-50"))) %>% 
    summarise(Male_BMI_Avg = mean(BMI[Gender=="Male"]), 
       Female_BMI_Avg = mean(BMI[Gender=="Female"])) 
# AgeRange Male_BMI_Avg Female_BMI_Avg 
# <fctr>  <dbl>   <dbl> 
#1  0-25   18   NaN 
#2 26-50   23    20 
0

はdplyrとreshape2パッケージを使用したソリューションです。

#Your Data 
df<-read.table(header = TRUE, text="Gender Age BMI 
Male  20 18 
       Male  40 22 
       Female 30 19 
       Male  50 24 
       Female 28 21") 


library(dplyr) 
results<-summarize(group_by(df, Gender, cut(df$Age, breaks=c(0, 25, 50))), mean(BMI)) 
library(reshape2) 
names(results)<-c("Gender", "Age", "mean-BMI") 
dcast(results, Age~Gender) 
関連する問題