根据另一个数据框中的数据删除行?

Remove rows based on data in another dataframe?

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

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

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

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

此致

series %>% 
  # filter out the BVDIDs from missingdata
  filter(!BVDID %in% pull(missingdata)) %>% 
  # order the df 
  arrange(BVDID, year)

方法有很多种,只有一种。

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

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

或者直接。 Liabilities == 0 将 return 布尔值,在将这些值转换为 0 或 1 之前添加 + 并检查这些值的总和是否大于 1,这些值将被删除。

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