R编码:如何使用4个完整的四分之一数据保存记录

时间:2016-06-30 04:07:15

标签: r

我有一个包含公司季度数据的数据框,并有这个问题:

如何仅为那些拥有四分之三数据的公司保留记录(因为公司有时会出现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出现了三次,但只有两个序列是好的,而另一个(在第5-8行)是随机出现的。为了清理有意义,每个序列1-2-3-4需要分配到同一年和公司。

这种情况使得任务相当棘手(至少对我而言)并且我已经尝试了将近一天,在网上搜索并尝试不同的方法,但似乎没有任何工作正常。

因此,我很乐意寻求帮助。

谢谢~M

3 个答案:

答案 0 :(得分:1)

以下是可以帮助您的代码:

library(data.table)
data<-data.table( year, qtr, company, IQ, REVQ, AssetQ, CashQ)
fullyr <- data[,.(len=.N),by=.(year)][len == 4]
data <- data[year %in% fullyr$year]

请求您提供下次尝试解决方案的代码:)

答案 1 :(得分:1)

以下代码可以帮助您....

protected List<List<TextPosition>>

&#39;最终&#39; dataframe将包含您需要的字段。

答案 2 :(得分:0)

我们可以使用data.table

library(data.table)
setDT(data)[data[, .I[uniqueN(qtr)==4], by = company]$V1]

或者

setDT(data)[, if(uniqueN(qtr)==4) .SD, by = company]
#   company year qtr         IQ       REVQ      AssetQ       CashQ
#1:    xray 1984   1  -5.827832   8.221870   9.6688477 -10.6321121
#2:    xray 1984   2   3.521643  -1.096940  -4.5014798  -0.9196087
#3:    xray 1984   3  -7.526160  -4.155428 -10.6556271   7.6872401
#4:    xray 1984   4  -7.255974   3.717738  -1.7913910   9.6325437
#5:    kilo 1989   1   2.252885 -19.238773   9.7476758   4.0115274
#6:    kilo 1989   2   9.018055 -12.411381  -0.3772812   6.8339812
#7:    kilo 1989   3 -12.221085 -13.040805   7.3529403   9.1510647
#8:    kilo 1989   4   2.088668  -7.753041   1.5701738 -11.2252986