R - 计算分配给相同数字的值

时间:2013-08-26 13:43:41

标签: r if-statement rows

我对这些数据有疑问:

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个地址。

3 个答案:

答案 0 :(得分:0)

使用plyr包中的ddply(mydata是您的数据,col3实际上是数据中的第3列,名称为col3。

MYDATA

> 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

答案 1 :(得分: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

答案 2 :(得分:0)

df2 <- unique(df[df$X3 == 1, c("time", "X3")])
sum(df2$time)