2017-07-19 16 views
1

におけるデータフレームのサブセットにおける複数の列上の機能私はデータフレーム(次の形式のサンプル)を持っている:計算統計および/またはR

DateTime    Ind1 Ind2 V1 V2 Ac1 Ac2 w1 w2 w3 shift 
2016-05-01 00:01:00  U  A 5 7 20 100 50 70 200 1 
2016-05-01 00:01:20  U  A 5 7 20 109 35 77 140 1 
2016-05-01 00:01:40  U  A 5 7 40 120 55 97 160 1 
... 
2016-05-01 00:08:20  U  A 5 7 15 157 70 70 204 2 
... 
2016-05-02 00:08:20  U  A 5 7 28 147 65 90 240 2 
... 
2016-05-02 00:20:00  U  A 5 7 35 210 45 100 167 3 

を私はいくつかの統計(例えば平均値新しいデータフレームを必要とします私は、次の手順を行うことができます
:TRIED

Date  shift Ind1 Ind2 avgV1 sdV1 avgV2 sdV2 avgAC1 .... 
2016-05-01 1  U  A 5.3 2.9 7.8 4.5 108 ..... 
2016-05-01 2  U  A 6.7 3.5 8.9 5.0 99 ..... 

解決、W3へv1の列の標準偏差)は、それぞれの日付とシフトの組み合わせに次のようなものを列挙されています。日時

df$Date <- format(as.POSIXct(df$DateTime, format="%Y-%m-%d %H:%M:%S"), format="%Y-%m-%d") 

2)から

1)抽出物の日付は、日付とシフトすることにより、データにラベルを付けます。

df$DateShift <- paste(df$Date, df$shift) 

3)各サブセットに対して、COL上でいくつかの統計を計算する:

tmp_df <- data.frame(levels(as.factor(df$DateShift))) 
avgV1 <- tapply(df$V1, df$DateShift, FUN=mean) 
sdV1 <- tapply(df$V1, df$DateShift, FUN=sd) 
avgV2<- tapply(df$V2, df$DateShift, FUN=mean) 
.... 

をしかし、私は、のように単純ではない名前の異なる種類の(と、元のデータフレーム内の50個の以上の列を有しています上記の例では)。
また、私が計算したい統計量は(たとえば、最大値と最小値、または他のユーザ定義関数の計算など)異なる場合があります。

列の種類と統計の種類(平均値、標準デベロッパーなど)を手作業でコード化したくありません
これを自動化する方法は何ですか?

答えて

1

dplyrのソリューションが来ていると確信していますが、多くの(数百万以上の)ローがないと、doByパッケージは非常にうまく動作します。

library(doBy) 
df_avg <- summaryBy(. ~ Date + Shift, FUN=c(mean, median, sd), data=df, na.rm=TRUE) 

はそうでV1.meanV1.medianでデータフレームを与える、とウィル。 . ~は、「すべての数値変数を集計する」ことを意味します。データフレーム内のいくつかの要因の情報を保持する場合は、たとえば、引数id.vars = ~somefac+somefac2を使用します。

+0

返信ありがとうございます。統計を計算すべきでない列(上記のInd1とInd2)を残す方法は? – Sree

+0

私はあなたが 'id.vars'引数を使用して後で削除することができると思います。 '' Ind1.mean'、 '' Ind1.median'などを削除するには、そのようにしなければなりません) 'dfr < - dfr [、!grepl(" Ind1 | Ind2 "、names(dfr))] –

0
library(dplyr) 

df %>% 
    mutate(Date = as.Date(DateTime)) %>% 
    group_by(Date, shift) %>% 
    summarise_each(funs(mean)) 
関連する問題