Как я могу удалить строки из набора данных, которые содержат значения «NA» и меньше необходимого объема данных? - PullRequest
3 голосов
/ 06 апреля 2019

У меня есть этот набор данных, который включает в себя все продажи для компании за данный год (балансовая единица = gvkey, year = fyeqarq, sales = saley).Я хочу удалить все строки, которые имеют значения NA, приписанные компании.Другими словами, полностью удалите из набора данных компании, которые имеют целое значение NA.Мне также нужно удалить все компании, у которых нет хотя бы 11 лет продаж.Каждый год имеет четыре значения, так как он измеряет продажи за каждый квартал.

Мне удалось самостоятельно удалить значения NA с помощью na.omit, но мне нужно удалить данные всей компании из набора данных, используя эти два условия.

Таким образом, из всего набора данных dfUSA следует удалить эту компанию с кодом 1001.

df.clean <- na.omit(dfUSA)

Приведенное выше удалит только значения NA.Но компания все еще будет там.

      gvkey   fyearq   saley
1      1001    1983    4,921 
2      1001    1983    NA
3      1001    1983    NA
4      1001    1983    NA
5      1001    1984    6,434
6      1001    1984    NA
7      1001    1984    NA
8      1001    1984    NA
9      1001    1985    7,865
10     1001    1985    NA
11     1001    1985    NA
12     1001    1985    NA

У нее также есть данные за 3 года, что является еще одной причиной, по которой их следует удалить.Некоторые компании могут иметь все значения продаж, но данные за 11 лет.Так что мне также нужно было бы проверить это.Как мне этого добиться?

Это мой первый пост, поэтому я могу предоставить дополнительную информацию, если это необходимо.

1 Ответ

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

Мы можем сделать group_by filter

library(dplyr)
df.clean <- dfUSA %>%
                   # group by the gvkey column
                   group_by(gvkey) %>%
                   # check whether there are any NA elements in saley
                   # negate (!) to change TRUE to FALSE and viceversa
                   # filter the logical vector so that it removes the whole group
                   filter(!any(is.na(saley)) %>%
                   # ungroup to be safe                   
                   ungroup()

Если также планируется удалить any 'gvkey' с NA или те, у которых меньше 10 'fyearq' данных,

dfUSA %>%
      group_by(gvkey) %>%
      # along with the earlier condition check the number of unique
      # fyearq and do the negation
      filter(!(any(is.na(saley)) & n_distinct(fyearq) < 10))%>%
      # ungroup to be safe                   
       ungroup()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...