首页 > 解决方案 > 根据另一个数据框中的数据删除行?

问题描述

我现在有一个包含超过 186k 观察(行)的数据集,如图 1 所示。这些都是 BVDID 列中的所有公司,它们应该包含 2013 年至 2017 年所有年份的数据。

在此处输入图像描述

missingdata <- series %>% filter(LIABILITIES == 0) %>% select(BVDID)

但是,我使用上面的代码在 missingdata 对象中发现了 87k 行只有零值。

在此处输入图像描述

如何删除数据框中缺少数据的带有 BVDID(公司代码)的系列对象的行?此外,应该有一种方法可以让那些年份在我的 str(series) 下看起来更好,并根据每个公司代码将它们升序排列。

最好的祝福

标签: rmissing-data

解决方案


方法有很多种,其中一种。

使用tidyverse anti_join函数,它给出的结果类似于 set 操作A-B,因此将从第二个数据中删除所有匹配的行。

series %>% anti_join(missingdata, by =c("BVDID" =  "BVDID")) 

或者直接。 Liabilities == 0将返回布尔值,+在将这些值转换为 0 或 1 之前添加,如果大于 1,则检查这些值的总和,将其删除。

series %>% group_by(BVDID)  %>% filter(sum(+(LIABILITIES == 0)) > 0) 

推荐阅读