【问题标题】:R coding: How to keep records with 4 complete quarters of dataR 编码:如何使用 4 个完整季度的数据保存记录
【发布时间】: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 %&gt;% group_by(year, company) %&gt;% filter(n() == 4) 可以。
  • data[as.logical(with(data, ave(as.character(qtr), company, year, FUN = function(x) all(1:4 %in% x)))), ]

标签: r


【解决方案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]

要求您提供您尝试过的代码,以便下次解决:)

【讨论】:

  • 如果qtr[2] &lt;- '1' 我认为应该排除第一组,是吗?
【解决方案2】:

下面的代码可以帮助你......

final=data.frame()
for(i in unique(data$company)){
temp=data[data$company==i,]
for(j in unique(temp$year)){
    if(nrow(temp[temp$year==j,])==4)
        final=rbind(final,data.frame(company=i,Year=j))
}
}

“最终”数据框将包含您的必填字段。

【讨论】:

    【解决方案3】:

    我们可以使用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
    

    【讨论】:

      猜你喜欢
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 2017-02-05
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      • 2012-09-11
      相关资源
      最近更新 更多