2016-06-09 4 views
0

큰 데이터 세트 (> 37m 개인)가 있고 R을 사용하고 있습니다. 초보자입니다. 현재, 나는 분석하고있는 국가의 주당 평균 가구 크기를 계산하려고 노력 중이다. 필자는 각 개인에게 개별 번호를 부여하는 데 필요한 변수와 HH라는 변수 (HouseHolds의 경우) 아래의 세대 번호를 제공하는 별도의 데이터 프레임을 만들었습니다. 이제 R이 내가 만든 새 데이터 프레임의 특정 열 (예 : HH 열)에서 중복을 제거하기를 원합니다.중복 제거 R

나는 duplicate() 및 unique() 함수를 사용하여 여러 번 시도했지만 작동하지 않습니다. 나는 또한이 "HH"열을 별도의 시트에서 격리하려고 시도했지만 이러한 함수는 여전히 중복을 제거하지 않습니다. 또한 벡터로 변환 한 다음 duplicate() 및 unique() 함수 (아래에서 볼 수있는 것처럼)를 수행했습니다.

엑셀에서 더 작은 샘플을 사용할 때 완벽하게 잘 작동합니다 (중복을 제거하는 것이 좋습니다). 여기

HHKE$HH<-(paste(HHKE$eano, HHKE$county, HHKE$tif)) 

이의 예입니다

HHvars<-c("eano", "county", "tif") 
HHKE<-PHCKCON[HHvars] 
as.numeric(HHKE$county) 
HHKE$county<-as.numeric(HHKE$county) 

가 그럼 난 내 가구에 대한 4 번째 열을 생성 :

내가 내 초기 데이터 세트 (즉 PHCKCON)를 기반으로 내 데이터 집합을 생성하는 방법이다 내 데이터 세트 : The values in the first three columns are numeric whilst the last are classified as characters

다음은 데이터의 작은 샘플입니다 (이것들을 고안했지만 같은 생각입니다) :

그런 다음 네 번째 열을 제공

mydata$HH<-paste(mydata$Enumeration.area, mydata$County, mydata$Household.members) 

: 여기

Enumeration.area County Household.members 
1     a   4 
1     a   4 
1     a   6 
1     a   6 
1     a   8 
1     a   8 
1     a   8 
2     a   4 
2     a   4 
2     a   6 
1     b   6 
1     b   6 
1     b   8 
1     b   8 
1     b   12 
1     b   12 
1     b   12 
1     b   12 

그리고내가 HH라는 제 4 열을 생성 한 것입니다.

HH 
1 a 4 
1 a 4 
1 a 6 
1 a 6 
1 a 8 
1 a 8 
1 a 8 
1 a 8 
2 a 4 
2 a 4 
2 a 6 
2 a 8 
1 b 6 
1 b 6 
1 b 8 
1 b 8 
1 b 12 
1 b 12 
1 b 12 
1 b 12 

가 그럼 난 (복제하기 위해) 내 HH 컬럼에 대한 별도의 데이터 세트를 생성 :

attach(mydata) 
HHvars<-c("HH") 
EX2<-mydata[HHvars] 

그때 EX2를 복제하려고 HH의 콜 럼 :

EX2[!duplicated(EX2$HH),] 

하지만 작동 안됨. 사용하지 않을 때

unique() 

기능 중 하나입니다.

더 명확 해지기를 바랍니다. 그리고 어떤 도움을 주셔서 감사드립니다.

건배, 마들렌

당신을 위해 무엇을 요구하는지 것은 단순히 각 enumeration.area의 각 카운티의 평균과 중앙값의 경우
+1

그래서 정확히 무엇을하려합니까? 시도하고있는 결과물의 예를 들려 줄 수 있습니까? 그리고 열의 변수가 무엇을 의미하는지 명확히 할 수 있습니까? –

+0

나는 이것을 설명하는 방법을 모르겠다 ... 내가 원하는 최종 결과는 R이 나에게 평균 가구 크기를 말해주는 것이다. 현재 R은 모든 동일한 대답을 요약하지 않습니다. –

+1

몇 가지 예제 입력을 적절한 열 이름과 원하는 예제 출력으로 게시하십시오. 이 작은 입/출력 데이터를 R로 직접 구성하고 질문을 편집하여 게시 할 수 있습니다. 그것은 도움을 얻는 가장 좋은 방법입니다. – Gopala

답변

0

, 당신은 오히려 빠르게 dplyr를 사용하여이 작업을 수행 할 수 있습니다. 나는 너의 것과 약간 일치하기 위해 몇 가지 데이터를 만들었다.

 Enumeration.area County mean median 
       (dbl) (fctr) (dbl) (dbl) 
1    1  a  5  5 
2    1  b  5  5 
3    2  a  9  9 
4    3  a  4  4 
5    3  b  3  3 

그런 결과 데이터 세트의 각 행 Enumeration.area와 카운티의 고유 한 조합이며, 그 조합의 각각에 대해 당신이 당신의 뜻을 가지고 있습니다 : 결과

library(dplyr) 
HH <- data.frame(
    Enumeration.area=c(1,1,1,2,2,2,3,3,3), 
    County=c('a','a','b','a','a','a','b','a','b'), 
    Household.members=c(4,6,5,8,10,9,3,4,3) 
) 
HH %>% group_by(Enumeration.area,County) %>% summarise(mean=mean(Household.members),median=median(Household.members)) 

평균 가구수.

편집 :

이후 원하는 출력과 각 관측에 대한 연결된 식별자를 생성, 이것은 당신이 할 수있는 방법입니다에 대한 것입니다 :

df <- HH %>% group_by(Enumeration.area,County) %>% 
    mutate(id=paste(Enumeration.area,County,Household.members)) 

이가있는 문자열을 만듭니다 Enumeration.area, County 및 Household.members의 조합입니다. 그런 다음 아래 그림과 같이, 모든 중복을 제거합니다 distinct(id)를 사용 : 당신이 볼 수 있듯이, 중복 행 "3 B (3)는"지금은 단지 하나 명의 고유 한 관찰로 감소 된

df 
    Enumeration.area County Household.members  id 
       (dbl) (fctr)    (dbl) (chr) 
1    1  a     4 1 a 4 
2    1  a     6 1 a 6 
3    1  b     5 1 b 5 
4    2  a     8 2 a 8 
5    2  a    10 2 a 10 
6    2  a     9 2 a 9 
7    3  b     3 3 b 3 
8    3  a     4 3 a 4 
9    3  b     3 3 b 3 

df %>% distinct(id) 
    Enumeration.area County Household.members  id 
      (dbl) (fctr)    (dbl) (chr) 
1    1  a     4 1 a 4 
2    1  a     6 1 a 6 
3    1  b     5 1 b 5 
4    2  a     8 2 a 8 
5    2  a    10 2 a 10 
6    2  a     9 2 a 9 
7    3  b     3 3 b 3 
8    3  a     4 3 a 4 

.

+0

고맙습니다! 그러나 그 일은 제가 200 개의 열거 지역, 47 개의 카운티 및 매우 많은 양의 가정 구성원을 보유하고 있다는 것입니다. R에 모든 코드/변수를 수집하는 데 사용할 수있는 함수 또는 코드가 있습니까? 특히 household.members 변수. 데이터베이스에서는 최대 156 (3 분위)이고 최대 값은 814입니다. –

+0

나는 아직도 당신이 무엇을 요구하고 있는지 이해하지 못하고 있습니다. 이전 의견에서 지방을 통합하고 싶지만 데이터 세트의 어느 곳에서나 그 사실을 볼 수는 없습니다. 데이터 그룹의 평균/중간 값을 얻는 데 관심이있는 경우 일부 유형의 집계 함수를 사용하는 것이 가장 쉬운 방법입니다. 내 게시물을 편집하여 원하는 출력을 처리합니다. – ZachTurn

+0

감사합니다! 이것은 나에게 더 합리적입니다. 나는 이렇게하려고 할 것입니다. –