2016-10-07 102 views
-1

我試圖搜索我的問題的答案,但我找到了Stata(我正在使用R)的正確答案。檢查一個變量是否是時間不變的R

我正在使用全國性調查來研究哪些變量會影響補充養老金的投資(這在我的國家是自願的)。

該調查每兩年進行一次,有些人接受一次以上的採訪。我篩選了df,以便只有個人出現超過一次的時間才能執行filter命令。這是從最初的調查爲例已經過濾:

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  

其中id是個人,y.b是出生年份,筆是一個虛擬這需要值爲1,如果個人在補充養老保險的形式投資。 我想這樣我加載plm包運行FE迴歸,然後我這樣設置DF:

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

此命令後,我預計,不斷變量被刪除,但在運行此迴歸後:

pan1 <- plm (pens ~ woman + age + I(age^2) + high + medium + north + centre, model="within", effect = "individual", data=dd.p, na.action = na.omit) 

(如果女性是一個變量,如果個體是女性,高,中指教育水平和北部,中心到地理區域),並且在命令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由4萬個觀測組成。

如果你知道另一種方法來檢查變量是否在R中是常量,我會很高興。

預先感謝您

+0

要麼'DF $ x < - (ave(df $ sex,df $ id,FUN = function(x)length(unique(x))== 1)* 1'或'aggregate(sex〜id ,df,FUN =函數(i)長度(unique(i))== 1)* 1',具體取決於您希望輸出的方式。 – Sotos

回答

1

我認爲你正在嘗試做的是計算sex唯一值的數量爲每id。您希望它是1,但任何2的情況都表示轉錄錯誤。 R中做到這一點的方法是

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

要打破下來,功能length(unique(x))告訴你不同的唯一值的數量在載體中。它與levels類似(但不完全相同,因爲一個因素可能不存在等級)。

函數by根據df$id計算df$sex的每個子集上的給定函數。換句話說,它計算length(unique(df$sex))其中df$id是1,然後是2等。

最後,any(... > 1)檢查是否有任何結果不止一個。如果是,結果將是TRUE(並且您可以使用which而不是any來查找哪些)。如果一切正常,結果將會是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 
相關問題