我有一个包含公司季度数据的数据框,并有这个问题:
如何仅为那些拥有四分之三数据的公司保留记录(因为公司有时会出现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
答案 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