【发布时间】:2016-06-30 13:13:01
【问题描述】:
我有一个包含公司季度数据的数据框,并且有一个问题:
如何仅保留那些拥有 4 个季度数据的公司的记录(因为公司有时会出现 1、2 或 3 个季度的数据,但我需要在整个数据框中为每家公司提供 4 个完整的季度)
我在下面包含了示例 R 代码:
company<-c("xray", "xray", "xray", "xray", "foxrot", "foxrot", "delta", "kilo", "kilo", "kilo", "kilo", "kilo", "kilo" )
year <-c("1984","1984","1984","1984", "1985", "1985","1986", "1987","1988","1989","1989","1989","1989" )
qtr <-c("1","2","3","4", "1", "2","3", "4","1", "1","2","3","4")
IQ <- rnorm(13,0,10)
REVQ <- rnorm(13,0,10)
AssetQ <- rnorm(13,0,10)
CashQ <- rnorm(13,0,10)
#Show dataframe
data<-data.frame( year, qtr, company, IQ, REVQ, AssetQ, CashQ )
在这个例子中,1984 年的“xray”和 1989 年的“kilo”应该是唯一留在新数据框中的公司。此示例的独特之处在于您会注意到季度序列 1-2-3-4 出现了 3 次,但其中只有两个序列是好的,因为另一个(在第 5-8 行)是随机出现的。为了使清理工作有意义,每个序列 1-2-3-4 需要分配给同一年和同一公司。
这种情况使任务变得相当棘手(至少对我自己而言),我已经尝试了将近一天,在网上搜索并尝试了不同的方法,但似乎没有任何工作正常。
因此,我很乐意寻求帮助。
谢谢~M
【问题讨论】:
-
假设同一家公司在同一年和同一季度没有重复条目,
library(dplyr) ; data %>% group_by(year, company) %>% filter(n() == 4)可以。 -
data[as.logical(with(data, ave(as.character(qtr), company, year, FUN = function(x) all(1:4 %in% x)))), ]
标签: r