R平衡不平衡面板数据的优雅方法 [英] R elegant way to balance unbalanced panel data

查看:1025
本文介绍了R平衡不平衡面板数据的优雅方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否有一种优雅的方法来平衡不平衡的面板数据集?我想从一个不平衡的面板开始(即,某些人缺少一些数据),最后以一个平衡的面板(即,所有人都没有数据)开始.以下是一些示例代码.正确的最终结果是保留对弗兰克"和爱德华"的所有观察结果,以及对托尼"的所有观察结果被删除,因为他缺少一些数据.谢谢.

Is there an elegant way to balance an unbalanced panel data set? I would like to start with an unbalanced panel (ie, some individuals are missing some data) and end up with a balanced panel (ie, all individuals are missing no data). Below is some sample code. The correct end result is for all observations on 'Frank' and 'Edward' to remain and for all observations on 'Tony' to be removed since he has some missing data. Thank you.

unbal <- data.frame(PERSON=c(rep('Frank',5),rep('Tony',5),rep('Edward',5)), YEAR=c(2001,2002,2003,2004,2005,2001,2002,2003,2004,2005,2001,2002,2003,2004,2005), Y=c(21,22,23,24,25,5,6,NA,7,8,31,32,33,34,35), X=c(1:15))
unbal

推荐答案

一种平衡面板的方法是删除数据不完整的个人,另一种方法是填写一个值,例如NA0缺少的观察结果.对于第一种方法,可以使用complete.cases查找其中没有NA的行.然后,您可以找到所有PERSON至少有一个丢失的情况.

One way to balance a panel is to remove individuals with incomplete data, another way is to fill in a value, such as NA or 0 for the missing observations. For the first approach, you can use complete.cases to find rows that have no NA in them. Then you can find all the PERSON with at least one missing case.

missing.at.least.one <- unique(unbal$PERSON[!complete.cases(unbal)])
unbal[!(unbal$PERSON %in% missing.at.least.one),]
#    PERSON YEAR  Y  X
# 1   Frank 2001 21  1
# 2   Frank 2002 22  2
# 3   Frank 2003 23  3
# 4   Frank 2004 24  4
# 5   Frank 2005 25  5
# 11 Edward 2001 31 11
# 12 Edward 2002 32 12
# 13 Edward 2003 33 13
# 14 Edward 2004 34 14
# 15 Edward 2005 35 15

这篇关于R平衡不平衡面板数据的优雅方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆