2016-10-07 14 views
-1

私は自分の質問に対する答えを検索しようとしましたが、私はStata(私はRを使用しています)の正解を見つけました。変数が時間不変であるかどうかを確認するR

私は、どの変数が補完的年金への投資に影響を与えるかを調査するために全国調査を使用しています(私の国では任意です)。

調査は2年ごとに実施され、一部の人は複数回面接されます。 filterコマンドを実行している人に複数回出席するだけにするためにdfをフィルタリングしました。これは、既に濾過し、元の調査の例である:

IDは、Y.Bは、出生の年個体である
year id y.b sex income pens 
2002 1 1950 F 100000  0  
2002 2 1943 M 55000  1  
2004 1 1950 F 88000  1  
2004 2 1943 M 66000  1  
2006 3 1966 M 12000  1  
2008 3 1966 M 24000  1  
2008 4 1972 F 33000  0  
2010 4 1972 F 35000  0  

、ペン個々相補年金形態に投資場合、値1をとるダミーです。私は一定の変数が削除されたことを期待しかし、この回帰実行した後、このコマンドの後

df.p <- plm.data(df, c("id", "year") 

を は私が plmパッケージをロードするように、FE回帰を実行したかったし、私はこのようなDFを設定しました
pan1 <- plm (pens ~ woman + age + I(age^2) + high + medium + north + centre, model="within", effect = "individual", data=dd.p, na.action = na.omit) 

(ここで、女性は、その人が女性である場合に値1をとり、高、中は教育レベル、北は中央、地理的地域を指します)、コマンドsummary(pan1)の後に依然として可変女性が存在します。

この時点では、アンケートに間違いがあると思います(たとえば、セックスは正しく挿入されていないため、同じIDで同じではありませんでした)。それぞれのid、性別は一定です。

私はこのコードを試してみましたが、私はそれが正しいではないと確信しています:

df$x <- ifelse(df$id==df$id & df$sex==df$sex,1,0) 

基本的な考え方は、このようなことshuold:

df$x <- ifelse(df$id=="1" & df$sex=="F",1,0) 

が、私はDFので、手動でそれを行うことはできません40k観測まで構成されています。

変数がRで一定かどうかを確認する別の方法を知っていれば、私はうれしく思います。

は、私が何をやろうとしているが、各idについてsexのユニークな値の数を計算すると思い事前

+0

どちらか 'DF $をx < - (ave(df $ sex、df $ id、FUN = function(x)length(ユニーク(x)))== 1)* 1'または 'aggregate 、df、FUN = function(i)length(unique(i))== 1)* 1'となります。 – Sotos

答えて

1

でいただきありがとうございます。あなたはそれが1であることを望んでいますが、2のいずれの場合も転写エラーを示しています。 Rでこれを行う方法はそれを打破するには

any(by(df$sex,df$id,function(x) length(unique(x))) > 1) 

で、機能length(unique(x))はあなたに、ベクトルの異なるユニークな値の数を伝えます。ファクタについてはlevelsに似ています(ファクタはレベルが存在しないため同一ではありません)。

関数byは、df$sexの各サブセットで与えられた関数をdf$idに従って計算します。つまり、length(unique(df$sex))を計算します。ここで、df$idは1、次に2などです。

最後に、any(... > 1)は、結果が複数であるかどうかをチェックします。その場合、結果はTRUEになります(そして、anyの代わりにwhichを使用して見つけることができます)。すべてが正常であれば、結果はFALSEになります。

0

我々はdplyr
例のデータで試すことができます。

df=data.frame(year=c(2002,2002,2004,2004,2006,2008,2008,2010), 
       id=c(1,2,1,2,3,3,4,4), 
       sex=c("F","M","M","M","M","M","F","F")) 

同上1は、FとMの両方で

library(dplyr) 
df%>%group_by(id)%>%summarise(sexes=length(unique(sex))) 
# A tibble: 4 x 2 
    id sexes 
    <dbl> <int> 
1  1  2 
2  2  1 
3  3  1 
4  4  1 

を私たちは、その後、フィルタリングすることができます:

df%>%group_by(id)%>%summarise(sexes=length(unique(sex)))%>%filter(sexes==2) 
# A tibble: 1 x 2 
    id sexes 
    <dbl> <int> 
1  1  2 
関連する問題