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 に答える