R/Stata: 删除没有数据的人
R/Stata: Remove persons without data
我有一个数据项目,我的面板集有问题。
我想删除 "persons" 没有关于变量 "car" 的数据
在我的例子中,我应该删除第 3 个人,但是拥有一些关于汽车数据的第 1 个人应该留在集合中
用 R/plyr 和 Stata 尝试过,但似乎没有任何效果。
数据集有 400,000 行 btw
数据示例:
person_id year car
1 2000 1
1 2001 nA
1 2002 1
1 2003 nA
2 1998 1
2 1999 0
2 2000 0
3 2003 nA
3 2004 nA
使用 library(dplyr)
,较新版本的 library(plyr)
:
datf <- read.table(text = "person_id year car
1 2000 1
1 2001 nA
1 2002 1
1 2003 nA
2 1998 1
2 1999 0
2 2000 0
3 2003 nA
3 2004 nA", header = TRUE)
# adjust to true NA values for R
datf$car <- gsub("nA", NA, datf$car)
# To keep only the people that don't have all NA values for car
library(dplyr)
datf %>% group_by(person_id) %>%
filter(!all(is.na(car)))
# result
person_id year car
<int> <int> <chr>
1 1 2000 1
2 1 2001 <NA>
3 1 2002 1
4 1 2003 <NA>
5 2 1998 1
6 2 1999 0
7 2 2000 0
在 Stata 中,假设您已将 car
转换为具有 Stata 数值缺失值的数值变量,而您现在拥有 nA。
. by person_id (year), sort: egen tokeep = count(car)
. list, clean noobs
person~d year car tokeep
1 2000 1 2
1 2001 . 2
1 2002 1 2
1 2003 . 2
2 1998 1 3
2 1999 0 3
2 2000 0 3
3 2003 . 0
3 2004 . 0
. drop if tokeep==0
(2 observations deleted)
. drop tokeep
. list, clean noobs
person~d year car
1 2000 1
1 2001 .
1 2002 1
1 2003 .
2 1998 1
2 1999 0
2 2000 0
如果您坚持为 car
、
保留当前基于字符串的编码
by person_id (year), sort: egen tokeep = sum(cond(car=="nA",0,1))
应该可以解决问题,虽然我没有测试。
我有一个数据项目,我的面板集有问题。
我想删除 "persons" 没有关于变量 "car" 的数据 在我的例子中,我应该删除第 3 个人,但是拥有一些关于汽车数据的第 1 个人应该留在集合中
用 R/plyr 和 Stata 尝试过,但似乎没有任何效果。 数据集有 400,000 行 btw
数据示例:
person_id year car
1 2000 1
1 2001 nA
1 2002 1
1 2003 nA
2 1998 1
2 1999 0
2 2000 0
3 2003 nA
3 2004 nA
使用 library(dplyr)
,较新版本的 library(plyr)
:
datf <- read.table(text = "person_id year car
1 2000 1
1 2001 nA
1 2002 1
1 2003 nA
2 1998 1
2 1999 0
2 2000 0
3 2003 nA
3 2004 nA", header = TRUE)
# adjust to true NA values for R
datf$car <- gsub("nA", NA, datf$car)
# To keep only the people that don't have all NA values for car
library(dplyr)
datf %>% group_by(person_id) %>%
filter(!all(is.na(car)))
# result
person_id year car
<int> <int> <chr>
1 1 2000 1
2 1 2001 <NA>
3 1 2002 1
4 1 2003 <NA>
5 2 1998 1
6 2 1999 0
7 2 2000 0
在 Stata 中,假设您已将 car
转换为具有 Stata 数值缺失值的数值变量,而您现在拥有 nA。
. by person_id (year), sort: egen tokeep = count(car)
. list, clean noobs
person~d year car tokeep
1 2000 1 2
1 2001 . 2
1 2002 1 2
1 2003 . 2
2 1998 1 3
2 1999 0 3
2 2000 0 3
3 2003 . 0
3 2004 . 0
. drop if tokeep==0
(2 observations deleted)
. drop tokeep
. list, clean noobs
person~d year car
1 2000 1
1 2001 .
1 2002 1
1 2003 .
2 1998 1
2 1999 0
2 2000 0
如果您坚持为 car
、
by person_id (year), sort: egen tokeep = sum(cond(car=="nA",0,1))
应该可以解决问题,虽然我没有测试。