2016-05-20 3 views
1

私はRコードを使用して総合的社会調査を分析しようとしていますに総合的社会調査を使用して選択し、次のURLでオンライン私が見つけたスクリプトを使用しています。しかし未定義の列R

https://github.com/ajdamico/asdfree/blob/master/General%20Social%20Survey/cumulative%20cross-sectional%20-%20analysis%20examples.R

、私はこのメッセージを得続けます[.data.frame(フレーム、J =ドロップをドロップ)に

エラー:

選択未定義 列と解決策を見つけることができませんここでは

私は上記のリンクから少し適応を使用していますコードです:すべてのヘルプは高く評価され

options(digits = 8) 
library(foreign) 
library(survey) 
library(memisc) 
options(survey.lonely.psu = "adjust") 

GSS.CS.file.location <- "http://gss.norc.org/documents/spss/GSS_spss.zip" 

tf <- tempfile() ; td <- tempdir() 
download.file(GSS.CS.file.location, tf, mode = "wb") 
fn <- unzip(tf, exdir = td, overwrite = T) 
print(fn[grep("sav$", fn)]) 

dat.pov<-as.data.set(spss.system.file(fn[grep("sav$", fn)])) 
z <- dat.pov 
rm(dat.pov) 
gc() 
dat.pov <- z 
rm(z) 
gc() 

save(dat.pov, file = "dat.pov.rda") 
load("dat.pov.rda") 
nrow(dat.pov) 
ncol(dat.pov) 
head(dat.pov) 

希望の変数

KeepVars<- c("oversamp", "formwt", "wtssall", "sampcode", "sample", "sex", 
      "age","region","nateduc","nateducy", "nateducz", "natefare", 
      "natefarey","natefarez","race","res16","income","partyid", 
      "polviews","educ","degree", "eqwlth","helpful","fair","trust", 
      "jobfind","class","rank","satfin", "finalter","finrela","unemp", 
      "getahead","parsol","kidssol","helppoor") 

dat.pov2 <- dat.pov[,KeepVars] 

までの狭いデータフレーム!

> KeepVars %in% names(dat.pov) 
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE FALSE 
[14] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 
[27] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE 

あなたもその名を選択するために、論理ベクトルを反転することができます:あなたはすべてのそれらのKeepVarsは、列名「に」あるかどうかを確認した場合、あなたはエラーがどこにあるか おかげ

+1

大規模なデータセットをダウンロードして、.rdaとして保存しました。メモリには、興味深い研究質問がありますか? –

+0

すばらしい答えをありがとう! – tlev

答えて

3

が表示されます名前は%in%ではありません。

> KeepVars[ ! KeepVars %in% names(dat.pov)] 
[1] "natefare" "natefarey" "natefarez" 

注...私はアンソニーは彼厳しくメモリに制約のあるラップトップ上で行うために必要な二重の割り当ておよびGC()操作をしませんでした。 (これは、32 Gを持つマシン上でそれを行うには意味を成しませんが、私は強く疑い、このインスタンスでは違いを作ることができることをやる。)

これは彼らに「ネイト」を持っている名前を返します。

> names(dat.pov)[ grepl("nate", names(dat.pov))] 
[1] "natenvir" "nateduc" "natenrgy" "natenviy" "nateducy" "natenviz" "nateducz" 

そして、これは彼らに「運賃」を持つ名前をリストします。

> names(dat.pov)[ grepl("fare", names(dat.pov))] 
[1] "natfare" "natfarey" "natfarez" "farewhts" "farejews" "fareblks" "fareasns" 
[8] "farehsps" "fareso" "workfare" "lessfare" "immfare" "aidsfare" "welfare1" 
[15] "welfare2" "welfare3" "welfare4" "welfare5" "welfare6" 

最後の文字ベクトルはあなたがスペルミスの名前を検索できますように思われることを。