2014-06-23 3 views
-1

유도 된 이진 변수가 invitevisit 인 위치 정보가 포함 된 다음 참여자 데이터 집합이 있습니다.중복 값에 대한 합계 생성

id=c(1, 2,3,4,5,6,7,8) 
fsa=c("K3M", "L5N", "M3T", "N2P", "Q3L", "K3M", "M3T", "N2P") 
invite=c(1, 1, 1, 0, 1, 1, 0, 1) 
visit=c(1, 0, 0, 0, 0, 1, 0, 1) 
df=data.frame(id, fsa, invite, visit) 

특정 위치의 참가자 수를 초대/방문한 수를 확인하기 위해 이진 변수의 개수 합계를 생성하려고합니다. 따라서 모든 중복 FSA, 나는 다음과 같이 초대와 방문의 합을 도출 할 :

고유 식별자가 여기에 문제가되지 않습니다 - 난 그냥

fsa=c("K3M", "L5N", "M3T", "N2P", "Q3L") 
invite=c(2, 1, 1, 1, 1) 
visit=c(2, 0, 0, 1, 0) 
df.tomake=data.frame(fsa, invite, visit) 

답변

1

당신이 사용할 수있는 집계를 원한다 여기에 집합하십시오

aggregate(cbind(invite,visit)~fsa, df, sum) 

이것은 fsa의 각 값에 대한 초대 및 방문의 합계가됩니다.

+0

이 수행 할 수 있습니다 그 합을 얻으려면? – Tan

+0

물론,'cbind'에 원하는만큼 추가 할 수 있습니다. – MrFlick

+0

모든 변수를 숫자로 설정하고 제안한 코드를 실행 한 후에이 오류 메시지가 나타납니다. aggregate.data.frame의 오류 (lhs, mf [-1L], FUN = FUN 등) : 행이 없습니다. 집계하려면 – Tan

2

당신은 열 이름을 지정하지 않고 당신은 빠른 집계, data.table

library(data.table) 
setDT(df)[, lapply(.SD, sum), by = fsa, .SDcols=-c("id")] 

## fsa invite visit 
## 1: K3M  2  2 
## 2: L5N  1  0 
## 3: M3T  1  0 
## 4: N2P  1  1 
## 5: Q3L  1  0 
0

또 다른 방법을 사용하려는 경우 : 2 개 이상의 변수가 있다면

library(dplyr) 
df %>% 
    group_by(fsa) %>% 
     summarise_each(funs(sum), -1) 
# Source: local data frame [5 x 3] 

# fsa invite visit 
#1 K3M  2  2 
#2 L5N  1  0 
#3 M3T  1  0 
#4 N2P  1  1 
#5 Q3L  1  0 
관련 문제