2

このデータに関して質問があります。

data =
1   time    3
2    20 0
3    20 0
4    20 0
5   350 1
6   350 1
7   350 1
8   10  0
9   20  1
10  37  0
11  37  0
12  50  1
13  50  1
14  40  0
15  40  0
16  40  0

誰かが 1 を見るのに費やした時間を要約したいと思います (列 3 に索引付けされています)。時間は常に 1 が表示されたときの合計表示時間に割り当てられます。そのため、1 が新たに表示された最初の時間だけを要約する必要があります (350 + 20 + 50 など)。

次のifような - ループ:

if (data$3 == 1) {
  sum <- data[:,2] }

すべての値が要約されるため、機能しません。0 の後の最初の 1 のみを常にアドレス指定するものが必要になります。

4

3 に答える 3

0

plyr パッケージから使用ddplyします (mydata はデータで、col3 は実際には col3 という名前のデータの列 3 です。

マイデータ

> mydata
   col1 time col3
1     1   20    0
2     2   20    0
3     3   20    0
4     4  350    1
5     5  350    1
6     6  350    1
7     7   10    0
8     8   20    1
9     9   37    0
10   10   37    0
11   11   50    1
12   12   50    1
13   13   40    0
14   14   40    0
15   15   40    0

library(plyr)
ddply(mydata,.(col3), summarize, mysum=sum(unique(time)))

  col3 mysum
1    0   107
2    1   420
于 2013-08-26T13:49:36.663 に答える
0
data = read.table(text = '
1   time    3
2    20 0
3    20 0
4    20 0
5   350 1
6   350 1
7   350 1
8   10  0
9   20  1
10  37  0
11  37  0
12  50  1
13  50  1
14  40  0
15  40  0
16  40  0
', header = TRUE)

data$first <- sequence(rle(data$time)$lengths)
data

sum(data$time[data$first==1 & data$X3==1])

# [1] 420
于 2013-08-26T14:07:11.243 に答える