我有这个数据集,其中包括给定年份中公司的所有销售额(公司代码= gvkey,年份= fyeqarq,销售额= saley)。我要删除所有具有NA值归属于公司的行。换句话说,从数据集中完全删除具有单个NA值的公司。我还需要删除所有没有销售11年的公司。每年都有四个值,因为它可以衡量每个季度的销售额。
我设法使用na.omit本身删除了NA值,但是我需要使用这两个条件从数据集中删除整个公司数据。
因此,应从整个数据集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年的数据。因此,我还需要一种检查方法。我该如何实现?
这是我的第一篇文章,因此如有需要,我可以提供更多信息。
答案 0 :(得分:2)
我们可以做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”或数据少于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()