我有一个数据帧(以下形式的样品):计算统计数据和/或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'等) –