R 如果变量只填充了一年,如何删除ID?

R 如果变量只填充了一年,如何删除ID?,r,dplyr,R,Dplyr,我有一个面板数据,其中缺少一些变量。我打算删除变量只填充了一年(以及2年、3年等等)的ID,因为这并没有给我足够的历史来处理 我的示例数据如下: 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 <

我有一个面板数据,其中缺少一些变量。我打算删除变量只填充了一年(以及2年、3年等等)的ID,因为这并没有给我足够的历史来处理

我的示例数据如下:

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)

id对于这个特定的示例,下面的代码起作用

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
mydata%>%
变异(句柄=行和([,3:6]))%>%
分组依据(id)%>%
突变(测试=总和(!is.na(句柄))%>%
过滤器(测试>0)%>%
选择(-test,-handle)
id时间x y z w
1 a 2000 1不适用不适用不适用
2B20002
3 c 2000不适用
4 a 2001 4
5 b 2001 5
6 c 2001不适用
7 a 2002 7
8 b 2002 8 8 8
9 c 2002 9
10 a 2003 10 10 NA
11 b 2003 11
12 c 2003 12 12
但是,请注意,我所做的只是考虑所有变量都已“填充”的
id
,而不是计算每个
id
显示完整信息的年数


如果您想让它放置一个优先级变量,即检查单个变量或变量子集是否具有至少2年的信息,只需将
mutate(handle=rowsumes([,3:6])
更改为
mutate(handle=rowSums([,“变量的位置”)
对于此特定示例,下面的工作

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
mydata%>%
变异(句柄=行和([,3:6]))%>%
分组依据(id)%>%
突变(测试=总和(!is.na(句柄))%>%
过滤器(测试>0)%>%
选择(-test,-handle)
id时间x y z w
1 a 2000 1不适用不适用不适用
2B20002
3 c 2000不适用
4 a 2001 4
5 b 2001 5
6 c 2001不适用
7 a 2002 7
8 b 2002 8 8 8
9 c 2002 9
10 a 2003 10 10 NA
11 b 2003 11
12 c 2003 12 12
但是,请注意,我所做的只是考虑所有变量都已“填充”的
id
,而不是计算每个
id
显示完整信息的年数


如果您想让它放置一个优先级变量,即检查单个变量或变量子集是否具有至少2年的信息,只需将
mutate(handle=rowSums([,3:6])
更改为
mutate(handle=rowSums([,“变量位置”)

,当您说populated时,这是否意味着所有变量或至少一个变量必须填充2年或更长时间?Hello@FelipeAlvarenga,我希望至少一个变量(假设我的优先级为x)必须填充2年或更长时间。当你说填充时,是否意味着所有变量或至少一个变量必须填充2年或更长时间?Hello@FelipeAlvarenga,我希望至少有一个变量(假设我的优先级为x)必须填充2年或更长时间。您好,@Felipe Alvarenga。非常感谢。该解决方案只需稍加修改即可与我的实际数据配合使用。过滤器(测试>0)必须是过滤器(测试>1)。否则就太棒了!你好,@Felipe Alvarenga。非常感谢。该解决方案只需稍加修改即可与我的实际数据配合使用。过滤器(测试>0)必须是过滤器(测试>1)。否则就太棒了!
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