消除具有相同id的观察但实际上在r中不对应

时间:2016-10-04 09:22:32

标签: r

我正在使用全国调查在R中进行计量经济学分析。

df基于每两年进行一次的调查:一些家庭已经被调查了一次以上,其他家庭只出现过一次。

变量family表示该族的代码号,变量nord是某一年中该族的成分的代码号;变量nordp表示个人在上一次调查中的代码编号。因此,当个体被多次交织时,nord和nordp shuold是相同的,但实际上并非总是如此。

我需要过滤df,以便只拥有至少出现一次的个人:

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

然后我使用此命令为每个人分配一个唯一的id值(在不同年份,我对同一对nquest和nord具有相同的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由超过50k的观察值组成,因此我无法检查每个id。

提前谢谢

2 个答案:

答案 0 :(得分:0)

你可以做到

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

这会返回带有多个不同性别注释的ID。

答案 1 :(得分:0)

来自dplyr的summarise_eachn_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