2016-05-23 2 views
0

У меня есть кадр данных:Совокупный кадр данных на 2 колонки, считая остатки колонки появлением

station person_id date 
1 0037  103103 2015-02-02 
2 0037  306558 2015-02-02 
3 0037  306558 2015-02-04 
4 0037  306558 2015-02-05 

мне нужно агрегировать кадр за станцией и дате, так что каждая уникальная станция/дата (каждая строка) в результате показывает, сколько людей падает на эту строку.

Например, первые две строки рухнули бы в одну строку, которая показывает 2 человека для станции 0037 и даты 2015-02-02.

Я попытался,

result <- data_frame %>% group_by(station, week = week(date)) %>% summarise_each(funs(length), -date) 
+0

'summaryize_each' необходимо, только если у вас есть несколько столбцов, которые вы хотите суммировать, например, если вы хотите, чтобы среднее значение четырех разных столбцов группировалось по группе/дате. – Gregor

ответ

2

Вы можете попробовать:

group_by(df, station, date) %>% summarise(num_people = length(person_id)) 
Source: local data frame [3 x 3] 
Groups: station [?] 

    station  date num_people 
    (int)  (fctr)  (int) 
1  37 2015-02-02   2 
2  37 2015-02-04   1 
3  37 2015-02-05   1 
+0

Разве это не просто 'count (df, station, date)'? Или, по крайней мере, 'group_by (df, station, date)%>% summary (n())'? –

+0

Отлично. Спасибо. – Cybernetic

0

В базовой R, можно использовать aggregate:

# sample dataset 
set.seed(1234) 
df <- data.frame(station=sample(1:3, 50, replace=T), 
       person_id=sample(30000:35000, 50, replace=T), 
       date=sample(seq(as.Date("2015-02-05"), as.Date("2015-02-12") 
           by="day"), 50, replace=T)) 

# calculate number of people per station on a particular date 
aggregate(cbind("passengerCount"=person_id) ~ station + date, data=df, FUN=length) 

cbind функция не является необходимым, но позволяет указать имя переменной.

0

С data.table мы преобразуем 'data.frame' в 'data.table', сгруппированные по 'станции', 'date', получаем количество строк (.N).

library(data.table) 
setDT(df1)[, .(num_people = .N), .(station, date)] 
# station  date num_people 
#1:  37 2015-02-02   2 
#2:  37 2015-02-04   1 
#3:  37 2015-02-05   1 
Смежные вопросы