我有一个面板数据,其中缺少一些变量。我打算删除仅填充变量一年的ID(以及2、3,依此类推),因为这没有足够的历史记录。
我的示例数据如下:
id <- c('a','b','c','d','a','b','c','d','a','b','c','d','a','b','c', 'd')
time <- c(2000,2000,2000,2000,2001,2001,2001,2001,2002,2002,2002,2002, 2003,2003,2003,2003)
x <- c(1,2,NA,NA,4,5,NA,NA,7,8,9,NA,10,11,12,12)
y <- c(NA,2,NA,NA,4,5,NA,NA,7,8,9,NA,10,11,12,12)
z <- c(NA,2,NA,NA,4,5,NA,NA,7,8,9,NA,NA,11,12,NA)
w <- c(NA,2,NA,NA,4,5,NA,NA,7,8,9,NA,NA,11,12, 12)
mydata <- data.frame(id, time, x, y, z, w)
我尝试了以下方法:
library(dplyr)
mydata.imp <- mydata %>% group_by(id,time) %>% filter(n()>1)
但这最终给了我0个观察值,当我按一年的条件(而a,b只有2年的条件)去掉时,我应该在数据框中指定id a,b,c。
我对一年情况的预期数据如下:
id <- c('a','b','c','a','b','c','a','b','c','a','b','c')
time <- c(2000,2000,2000,2001,2001,2001,2002,2002,2002,2003,2003,2003)
x <- c(1,2,NA,4,5,NA,7,8,9,10,11,12)
y <- c(NA,2,NA,4,5,NA,7,8,9,10,11,12)
z <- c(NA,2,NA,4,5,NA,7,8,9,NA,11,12)
w <- c(NA,2,NA,4,5,NA,7,8,9,NA,11,12)
mydata.imp <- data.frame(id, time, x, y, z, w)
非常感谢任何帮助。谢谢!
答案 0 :(得分:2)
对于此特定示例,以下工作。
mydata %>%
mutate(handle = rowSums(.[, 3:6])) %>%
group_by(id) %>%
mutate(test = sum(!is.na(handle))) %>%
filter(test > 0) %>%
select(-test, - handle)
id time x y z w
<fct> <dbl> <dbl> <dbl> <dbl> <dbl>
1 a 2000 1 NA NA NA
2 b 2000 2 2 2 2
3 c 2000 NA NA NA NA
4 a 2001 4 4 4 4
5 b 2001 5 5 5 5
6 c 2001 NA NA NA NA
7 a 2002 7 7 7 7
8 b 2002 8 8 8 8
9 c 2002 9 9 9 9
10 a 2003 10 10 NA NA
11 b 2003 11 11 11 11
12 c 2003 12 12 12 12
但是,请注意,我正在做的是仅考虑{填充了所有变量的ids
,而不是计算每个id
的年限,并显示完整的信息。
如果您希望它放置优先级变量,即检查单个变量或变量的子集是否具有至少两年的信息,只需将mutate(handle = rowSums(.[, 3:6]))
更改为mutate(handle = rowSums(.[, "position of the variables"]))