我有一個數據幀(以下形式的樣品):計算統計數據和/或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
我需要一個新的數據幀,其中一些數據(例如意味着,標準差)列V1至W3列出每個日期和移位合成,類似於下面的內容:
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 .....
解決方案嘗試:
我可以做下面的步驟。
1)從日期時間
df$Date <- format(as.POSIXct(df$DateTime, format="%Y-%m-%d %H:%M:%S"), format="%Y-%m-%d")
2)提取日期的日期和換檔標記數據。
df$DateShift <- paste(df$Date, df$shift)
3)對於每個子集,計算在一個山坳的一些統計數據:
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分多列在原來的數據幀,與不同類型的名稱(而不是簡單在上面的例子中)。
此外,我想要計算的統計數據可能會有所不同(比如,計算最大值和最小值,或其他用戶定義的函數)。
所以我不想手工編寫列的不同組合和統計類型(平均值,標準dev等)
這是什麼方法來實現這個自動化?
感謝您的回覆Remko。如何忽略不應計算統計數據的列(上面的Ind1和Ind2)? – Sree
我認爲你可以使用'id.vars'參數,然後刪除它們,或者保持原樣並在完成時拋棄它們。 ''dfr < - dfr [,!grepl(「Ind1 | Ind2」,names(dfr))]''(必須這樣去除'Ind1.mean','Ind1.median'等) –