2013-08-26 49 views
2

計算值我有一個關於這個數據的問題:的R - 分配到相同數量的

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] } 

不起作用,因爲所有值都被彙總。我需要的東西,只有第1 0。

回答

0

使用ddply從plyr包(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 
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 
0
df2 <- unique(df[df$X3 == 1, c("time", "X3")]) 
sum(df2$time) 
+0

請注意,我們的答案給出不同的結果,如果在'前三排X3' = 1,因爲'20'在'time'出現在兩個不同的羣體和'X3'將1兩 –

+0

@Mark Miller,非常感謝我的回答指出這個問題!你的解決方案要好得多。 – Henrik