Как отбросить идентификаторы, если переменные заполнены только за год? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть данные панели, где некоторые переменные отсутствуют.Я намерен отбросить идентификаторы, в которых переменные заполнены только на один год (и 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, c в моем фрейме данных, когда я опускаюсь наусловие на один год (и a, b только с условием на 2 года).

Мой ожидаемый кадр данных для условия на один год следующий:

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)

Любая помощь вообще очень ценится,Спасибо!

1 Ответ

2 голосов
/ 12 апреля 2019

Для этого конкретного примера работает следующее:

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 отображается с полной информацией.

Если вы хотите, чтобы она поместила приоритетную переменную, т. Е. Проверила, имеет ли единственная переменная или подмножество ваших переменных как минимум 2 года информации, просто изменитеmutate(handle = rowSums(.[, 3:6])) в mutate(handle = rowSums(.[, "position of the variables"]))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...