1

我有以下问题: 我有下表:

> data
    StartPoint EndPoint timeDiff
1         A91    TX043      258
2         A91    TX048      547
3         A92    TX088      330
4         A91    TX088      289
5         A91    TX043      387
6         A92    TX088      241
7         A91    TX088      213
8         A92    TX043      295
9         A91    TX088      518
10        A92    TX088      414

我需要以下形式的聚合:

StartPoint  EndPoint  count  mean(timeDiff)
   A91         TX088    3    mean of 289,213 and 518
   A91         TX043    2    mean of 258 and 387
   A91         TX048    1     547
   A92         TX088    3    mean of 330, 241 and 414
   A92         TX043    1     295

count 是相同 StartPoint 和 EndPoint 对的出现次数,mean 是具有相同 StartPoint 和 EndPoint 对的条目的 timeDiff 的平均值。结果应按 StartPoint、count 和 EndPoint 排序。

任何帮助将不胜感激。

提前致谢, 杉

我的数据:

data <- structure(list(StartPoint = c("A91", "A91", "A92", "A91", "A91", "A92", "A91", "A92", "A91", "A92"), EndPoint = c("TX043", "TX048", "TX088", "TX088", "TX043", "TX088", "TX088", "TX043", "TX088", "TX088"), timeDiff = c(258, 547, 330, 289, 387, 241, 213, 295, 518, 414)), .Names = c("StartPoint", "EndPoint", "timeDiff"), row.names = c(NA, 10L), class = "data.frame")
4

2 回答 2

4

您可以使用基本功能执行此操作aggregate

aggregate(timeDiff~StartPoint+EndPoint,data,function(x) cbind(length(x),mean(x)))
  StartPoint EndPoint timeDiff.1 timeDiff.2
1        A91    TX043     2.0000   322.5000
2        A92    TX043     1.0000   295.0000
3        A91    TX048     1.0000   547.0000
4        A91    TX088     3.0000   340.0000
5        A92    TX088     3.0000   328.3333

但是包装ddply中的可能会带来更令人愉悦的结果:plyr

library(plyr)
ddply(data,c(.(StartPoint),.(EndPoint)),summarise,count=length(timeDiff),mean=mean(timeDiff))
  StartPoint EndPoint count     mean
1        A91    TX043     2 322.5000
2        A91    TX048     1 547.0000
3        A91    TX088     3 340.0000
4        A92    TX043     1 295.0000
5        A92    TX088     3 328.3333
于 2012-08-10T13:37:31.247 回答
3

您可以使用例如 data.table:

library(data.table)
data <- data.table(data)
data[, list(count=length(timeDiff), mean=mean(timeDiff)), by=c("StartPoint", "EndPoint")]
   StartPoint EndPoint count     mean
1:        A91    TX043     2 322.5000
2:        A91    TX048     1 547.0000
3:        A92    TX088     3 328.3333
4:        A91    TX088     3 340.0000
5:        A92    TX043     1 295.0000
于 2012-08-10T15:26:47.343 回答