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-loop 像:

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 回答
0
df2 <- unique(df[df$X3 == 1, c("time", "X3")])
sum(df2$time)
于 2013-08-26T14:12:20.143 回答