2016-10-04 33 views
0

我使用的是全国性调查,在R.消除具有相同ID的意见,但实际上并不在r中

的DF是在此基础上每两年进行的调查显示运行计量经济分析对应:有的家庭已被间隔了一次以上,其他人只出现过一次。

变量族表示家族的代码号,变量nord表示某一年的家族成员网络的代码号;变量nordp表示该人在上一次调查中的编码。所以当个人被多次打扰时,nord和nordp会保持一致,但实际上并非总是如此。

我需要过滤DF才能有只出现至少一次个人:

df <- df %>% 
group_by(nquest, nordp) %>% 
filter(n()>1) 

然后我将值分配给每一个人一个唯一的ID使用此命令(在不同年份我有对于同一对夫妇nquest和诺德)相同的ID:

df <- transform(df, id=as.numerica(interaction(nquest, nord)) 

的问题是,有时数据以错误的方式进行介绍,以便在一年内同一个人(具有相同的nquest和nordp标识)其实并不是真正的同一个人;例如用**来看两条线;他们有相同的nquest和nordp,所以相同的id,但他们不是同一个人(nord不一样,而且性别也不同)。

year id nquest nord nordp sex 
**2000 1  10 1  1 F** 
    2000 2  20 1  1 M 
    2000 3  30 1  1 M 
    2002 1  10 1  1 F 
    2002 2  20 1  1 M 
    2002 4  40 1  1 F 
**2004 1  10 2  1 M** 
    2004 2  20 1  1 M 
    2004 3  30 1  1 M 

所以我的问题是消除使用性别作为检查变量不是真正相同的观察;考虑到df由超过5万个观察值组成,所以我无法检查每个ID。

预先感谢您

回答

0

你可以做

unique_df <- unique(df[,c("id","nquest","nordp","sex")]) 
unique_df$id[duplicated(df_unique$nquest)] 

此方法返回多个不同性别注释的ID。

+0

谢谢@tobiasegli_te它比我想象得容易 –

0

随着summarise_each和dplyr你n_distinct可以这样做:

library("dplyr") 

DF=read.table(text="year id nquest nord nordp sex 
**2000 1  10 1  1 F** 
    2000 2  20 1  1 M 
    2000 3  30 1  1 M 
    2002 1  10 1  1 F 
    2002 2  20 1  1 M 
    2002 4  40 1  1 F 
**2004 1  10 2  1 M** 
    2004 2  20 1  1 M 
    2004 3  30 1  1 M",header=TRUE,stringsAsFactors=FALSE) 



summaryDF= DF %>% 
      group_by(id) %>% 
      summarise_each(funs(n_distinct),everything(),-year,-id) %>% 
      filter(sex>1 & nord >1 & nquest==1 & nordp==1) %>% #filter conditions on resultant data.frame 
      as.data.frame() 

summaryDF 
# id nquest nord nordp sex 
# 1  1 2  1 3