将平均值与R中的特定数据值进行比较

时间:2012-10-26 18:38:39

标签: r dataframe data.table

我有一个这样的数据框:

Date     Process Duration
1/1/2012 xnit     10
1/1/2012 xnit     15
1/1/2012 xnit     20
1/2/2012 telnet   80
1/2/2012 telnet   50
1/2/2012 telnet   40
8/1/2012 ftp      3
8/1/2012 ftp      11
8/1/2012 ftp     12

收敛到x< -data.table(x):

之后

我可以计算每项工作的平均值:

x<-x[, mean := mean(Duration), by = Process]

我喜欢比较特定日期持续时间与平均值的持续时间。我试过这个:

x<-x[, Aug1 := subset(x, Date==as.Date(c("2012-08-01")))$Duration, by = Process]

一旦得到这个值,我就会将Aug1列与每个进程的平均值进行比较,以查看异常值。但是,此命令需要很长时间才能完成。有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

使用:=时无需重新分配x,因为这是通过引用分配给x(特别是从版本1.8.3开始默认不打印)。我也不会在data.tables中使用子集或$,因为这会避免所有data.table效率。 -

尝试这样的事情

 x <- data.table(x)
 # add a column that is the by-process mean
 x[, mean_duration := mean(Duration), by = Process]

 # calculate the difference
 x[, diff_duration := Duration - mean_duration]

 # subset just the 1st of august
 x[Date==as.Date("2012-08-01")]

如果data.tableDate键入,则可以更有效地完成此最终子集。在当前形式中,最后一步是矢量扫描,但单个矢量扫描的效率不应太低。

我建议阅读介绍小插图,以更好地利用data.table语法和效率。