r - 如何从包含“NA”值且少于所需数据量的数据集中删除行?
问题描述
我有这个数据集,其中包括公司在给定年份的所有销售额(公司代码 = 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 年的数据。所以我还需要一种方法来检查它。我怎样才能做到这一点?
这是我的第一篇文章,因此如果需要,我可以提供更多信息。
解决方案
我们可以做一个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
具有 NA 或具有少于 10 个 'fyearq' 数据的 'gvkey',
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()
推荐阅读
- pycharm - PyCharm/CProfiler 调用图未加载任何文本
- c# - 我的代码有什么问题,我的下拉列表不起作用
- sql - 在pl/sql中打印奇数和偶数
- forms - 密码输入类型=“密码”在屏幕上显示为“文本”?
- python - 从 JPEG 编码(通过 cv2.imencode)字节数组中取回一个 numpy 数组
- c - 构建永远不会结束
- cgal - PS::3d 点的简化
- android - 任务':app:processDebugResources'执行失败。执行com.android.build.gradle.internal.tasks.Workers$ActionFacade时发生故障
- python - AttributeError:元组 obj 在 PySimpleGUI 的 .py 脚本中没有属性
- python - 如何在python的api调用中包含变量?