我现在有一个数据集,它有超过186k的观测值(行),如图1所示。这些都是BVDID列中的公司,它们应该包含2013到2017年间的所有数据。
missingdata <- series %>% filter(LIABILITIES == 0) %>% select(BVDID)
但是,我使用上面的代码在丢失数据对象中发现了87k行的零值。
如何在缺少数据的数据中使用BVDID (公司代码)删除系列对象的行?此外,在我的str(系列)中,应该有一种方法可以使这些年看起来更好,并根据每个公司代码进行升序。
诚挚的问候
发布于 2021-02-20 16:47:14
有很多种方式,一种这样的方式。
使用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)
发布于 2021-02-20 16:41:57
series %>%
# filter out the BVDIDs from missingdata
filter(!BVDID %in% pull(missingdata)) %>%
# order the df
arrange(BVDID, year)
https://stackoverflow.com/questions/66293934
复制相似问题