2014-10-03 4 views
1

여러 질문 (y1, y2, y3, ...)에 대한 정수 값 응답 및 각 응답자에게 할당 된 가중치 수 (weighted count)로 구성된 측량 데이터로 작업 중입니다.플라이어 가중치 테이블 데이터 프레임

foo <- data.frame(wcount = c(10, 1, 2, 3),  # weighted counts 
        y1 = sample(1:5, 4, replace=T), # numeric responses 
        y2 = sample(1:5, 4, replace=T), # 
        y3 = sample(1:5, 4, replace=T)) # 
>foo 
    wcount y1 y2 y3 
1  10 5 5 5 
2  1 1 4 4 
3  2 1 2 5 
4  3 2 5 3 

그리고이 값을 가중치 테이블의 통합 된 데이터 프레임 버전, 즉 응답 값을 나타내는 첫 번째 열과 가중치 수를 나타내는 다음 세 개의 열로 변환하고 싶습니다.

library(Hmisc) 
ty1 <- wtd.table(foo$y1, foo$wcount) 
ty2 <- wtd.table(foo$y2, foo$wcount) 
ty3 <- wtd.table(foo$y3, foo$wcount) 

bar <- merge(ty1, ty2, all=T, by="x") 
bar <- merge(bar, ty3, all=T, by="x") 

names(bar) <- c("x", "ty1", "ty2", "ty3") 
bar[is.na(bar)]<-0 
>bar 
    x ty1 ty2 ty3 
1 1 3 0 0 
2 2 3 2 0 
3 3 0 0 3 
4 4 0 1 1 
5 5 10 13 12 

내가 ddply plyr 및 numcolwise 또는 이것을 자동화하는 방법이 의심이 사용하여 열을 기준으로 명시 적으로 수행 할 수 있습니다. 예를 들어, 다음은 거의 끝나지만 작업을 완료하는 데 필요한 다른 것이 있는지 잘 모르겠습니다.

library(plyr) 
bar2 <- numcolwise(wtd.table)(foo[c("y1","y2","y3")], foo$wcount) 
>bar2 
     y1  y2  y3 
1 1, 2, 5 2, 4, 5 3, 4, 5 
2 3, 3, 10 2, 1, 13 3, 1, 12 

의견이 있으십니까?

+0

안녕하세요, 무엇을 조사 작업중인 : 많은, 많은 예제하지만 RECS에 대한 http://asdfree.com/를 참조 같은 것을 할? 이것은'confidence' 간격을 맞추기 위해'mitools' +'survey' 패키지가 필요한 다중 대체물처럼 보입니다. –

+0

저는 EIA의 미국 가정용 에너지 소비 조사 (RECS)와 협력하고 있습니다. 참조 정보를 주셔서 감사합니다. 모든 것에 대한 패키지가 있습니다. – Bryan

+0

이것은 복제 기반 조사 일뿐입니다. 당신은 바퀴를 다시 발명하려고합니다. 당신은 훨씬 더 쉽게 시간을 가질 것입니다. (공식적인 방법을 복제하십시오.) (http://www.eia.gov/consumption/residential/methodology/2009/pdf/using-microdata- 022613.pdf). :) –

답변

1

아니 plyr 대답하지만,이 패키지 reshape2에서 함수를 사용하여 노골적으로 달려 드는 수있는 문제를 집계/재 형성 나를 쳤다.

처음으로 x (고유 값은 y1 - y3)이라고 명명 할 수있는 응답 값의 열을 만드는 데이터 세트 melt입니다.

library(reshape2) 
dat2 = melt(foo, id.var = "wcount", value.name = "x") 

는 이제이 집계 함수로 sum를 사용하여, dcast와 넓은 다시 캐스팅 할 수 있습니다. 그러면 각각 x 값의 합계가 wcount 인 열로 y1 - y3이 다시 나타납니다. 당신이 복제 가중치를 사용하는 설문 조사 데이터 세트를 설명하는

x y1 y2 y3 
1 1 3 0 0 
2 2 3 2 0 
3 3 0 0 3 
4 4 0 1 1 
5 5 10 13 12 
+0

이것은 완벽하게 작동합니다, 감사합니다! 나는 영원히 녹을 사용하고 있었지만, 나는 캐스트 초보자였다. 그래서 이것은 매우 도움이되었다. 학습 목적으로, 나는 아직도/ddply를 사용하여 이것이 달성 될 수 있는지 이해하는 것에 관심이있다. – Bryan

0

주기

# Cast back wide using the values within y1-y3 as response values 
    # and filling with the sum of "wcount" 
dcast(dat2, x ~ variable, value.var = "wcount", fun = sum) 

.

library(survey) 

x <- read.csv("http://www.eia.gov/consumption/residential/data/2009/csv/recs2009_public.csv") 
rw <- read.csv("http://www.eia.gov/consumption/residential/data/2009/csv/recs2009_public_repweights.csv") 
y <- merge(x , rw) 

# create a replicate-weighted survey design object 
z <- svrepdesign(data = y , weights = ~NWEIGHT , repweights = "brr_weight_[0-9]") 

# now run all of your analyses on the object `z` .. 
# see the `survey` package homepage for details 

# distribution 
svymean(~ factor(BASEHEAT) , z) 

# mean 
svymean(~ TOTHSQFT , z) 
+0

예를 들어 주셔서 감사합니다! FWIW, 궁극적 인 목표는 CI를 사용하여 요약 통계를 찾는 것이 아니라 가중치를 지원하지 않는 격자에서 가중치 막대 그래프 및 가중 된 경험적 cdf 플롯을 사용하여 여러 연속 응답 (예 : 온도 설정)의 분포를 탐색하는 것입니다 (밀도 도표), 그래서 내가 원하는 것을 보여주기 위해 데이터를 약간 다시 포맷해야했다.설문 조사는 이러한 기능 중 일부를 제공하지만 격자로 플로팅하기위한 다중 패널 컨디셔닝 기능을 선호합니다. 설문 조사와 함께 시간을 보내서 그들이 함께 일할 수있는 방법/방법을 확인해야합니다. – Bryan