2012-08-01 6 views
3

저는 카운티, 날짜 및 방문수의 세 열이있는 행렬이 있습니다. 날짜는이 (그냥 예)처럼, 각 카운티의 반복 :행렬을 축소하여 한 열의 값을 다른 열의 값으로 합치십시오.

County A 1/1/2012 2 
    County A 1/2/2012 0 
    County A 1/3/2012 5 
    ... etc. 
    County B 1/1/2012 3 
    County B 1/2/2012 4 
    ... etc. 
나는 각 날짜에 대한 모든 카운티에서 방문을 요약하는이 행렬을 축소하려는

. 그래서 다음과 같이 보일 것이다 : 나는 R의 "table()" 기능을 사용하려고하지만,이 방식으로 날짜별로 방문에서 작동하도록 얻이 수없는 것

1/1/2012 5 
1/2/2012 4 
etc. 

. 내가 할 때 "table(dt$date, dt$Visits)" 나 에게이 같은 주파수의 테이블을 제공합니다 :

   0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
    2011-01-01 3 1 2 0 1 1 0 2 0 0 0 0 0 0 0 0 
    2011-01-02 2 3 1 0 0 1 0 0 1 0 2 0 0 0 0 0 
    2011-01-03 3 1 1 2 1 0 0 0 0 1 0 0 0 0 1 0 

어떤 제안? 어떤 종류의 "합"을 사용하는 것이 더 나은 기능이 있습니까?

감사합니다.

답변

3

@DWin 상태에서, table()은 합계가 아니고 레코드 수입니다.

나는 plyr, data.table

all_data <- expand.grid(country = paste('Country', LETTERS[1:3]), 
    date = seq(as.Date('2012/01/01'), as.Date('2012/12/31'), by = 1)) 

all_data[['ed_visits']] <- rpois(nrow(all_data), lambda = 5) 



# using plyr 

library(plyr) 

by_date_plyr <- ddply(all_data, .(date), summarize, visits = sum(ed_visits)) 


# using data.table 
library(data.table) 
all_DT <- data.table(all_data) 
by_date_dt <- all_DT[, list(visits = sum(ed_visits)), by = 'date' ] 

# using aggregate 
by_date_base <- aggregate(ed_visits ~ date, data = all_data, sum) 
5

table()은 합계가 아닌 레코드 수입니다. tapply을 사용하려면 테이블 출력을 얻고 sum 기능을 적용 할 수 있습니다. 또는 ave을 사용하여 데이터 프레임과 길이가 같은 합 벡터를 얻을 수 있습니다. 아마도 :

with(EDcounts, tapply(EDcounts[[3]], EDcounts[[2]], sum, na.rm=TRUE)) 

당신은 수식의 LHS에 "방문"열 이름을 넣어 경우뿐만 아니라 방문 횟수의 합계로 xtabs 동축 케이블에 어쩌면 수.

+0

aggregate 주셔서 감사합니다 사용 방법의 세 가지 예를 제공합니다! Tapply는 훌륭하게 작동했습니다. 결코 전에 "멋지다"는 것을 보지 못했습니다! – mEvans

+0

'with'는 콘솔 작업을 상당히 단순화합니다. 도움말 페이지에서는 "$"를 함수로 사용할 수있는 것처럼 함수 내부에서 오류가 발생할 수 있다고 경고합니다. –

관련 문제