2017-01-18 24 views
-1

我有一個表在數據庫如下:如何採取求和

id place_id  minutes spent_time 
___ _________  ______ ___________ 
1  1    0  2 
1  1    5  3 
1  1    10  2 
1  2    10  3 
1  2    15  3 
1  2    20  9 

這裏分鐘爲0意味着間隔(0-5分鐘)。所以在10-15分鐘內它是在place_id 1 2分鐘和休息place_id 2.

這給出了每個five_minutes花費的時間。所以我想知道在place_id 1花費的總時間移動到位置2之前。這意味着2 + 3 + 2 = 7分鐘在地點1前去地方2.

我試過rle(df $ place_id)這將給

3 3 
1 2 

但是,如何總結這些塊的花費時間?

+1

我通過求和'2 + 3 + 2#[1] 7'得到一個不同的數字, – akrun

回答

1

使用aggregate

library(dplyr) 
df1 %>% 
    group_by(id, place_id) %>% 
    summarise(spent_time = sum(spent_time)) 

或者與aggregate用組:

> a 
    id place_id minutes spent_time 
1 1  1  0   2 
2 1  1  5   3 
3 1  1  10   2 
4 1  2  10   3 
5 1  2  15   3 
6 1  2  20   9 
> aggregate(a$spent_time, by=list(Category=a$place_id), FUN=sum) 
     place_id spent_time 
    1  1  7 
    2  2  15 

您還可以使用tapply如下圖所示:

> tapply(a$spent_time, a$place_id, FUN=sum) 
    place_id spent_time 
    1    7 
    2    15 
1

我們可以通過操作從base R

aggregate(spent_time ~ id + place_id, df1, FUN = sum)