![](/img/trans.png)
[英]R coding: How to keep records with only 4 complete quarters of data and how to take a conditional sum with multiple conditions
[英]R coding: How to take a conditional sum/mean with multiple conditions in a dataframe
我有一个包含公司季度数据的数据框,并希望在给出两个条件:年和公司的所有四个季度中采用年平均值或总和(基于变量类型)。
例如,根据四个不同的季度值,1984年的公司i将分别具有平均库存价值和总收入,分别为Companyi_I1984和Companyi_REV1984。 我目前正在使用这些代码行 - 对于均值和求和 - 但R保持返回“NA”并且我搜索并搜索了替代方案,但似乎没有任何工作:
Companyi_I1984 <- with(R, mean(I [FY == "1984" & Co == "AAR CORP" ]))
Companyi_REV1984 <- with(R, sum(REVQ [FY == "1984" & Co == "AAR CORP" ]))
R是我的数据框I < - 季度库存REVQ < - 季度收入
我在下面提供了示例R代码供参考:
company<-c("xray", "xray", "xray", "xray", "xray", "xray", "xray", "xray", "kilo", "kilo", "kilo", "kilo" )
year <-c("1984","1984","1984","1984", "1985", "1985","1985", "1985","1984","1984","1984","1984" )
qtr <-c("1","2","3","4", "1", "2","3", "4","1", "2","3","4")
IQ <- rnorm(12,0,10)
REVQ <- rnorm(12,0,10)
AssetQ <- rnorm(12,0,10)
CashQ <- rnorm(12,0,10)
#Show dataframe
data<-data.frame( year, qtr, company, IQ, REVQ, AssetQ, CashQ )
在这个例子中,我想要'xray_1984','xray_1985'和'kilo_1984'的平均值或总和。 请注意同一年如何在不同公司中出现。
这是我的第一个问题的第二个阶段,在这里找到: R编码:如何用4个完整的四分之一数据保存记录
任何帮助将受到高度赞赏。 谢谢~M
我们可以使用data.table
。 转换“data.frame”到“data.table”( setDT(data)
),由“年”分组,“公司”,我们遍历列( .SD
指定) .SDcols
,得到sum
和sd
,并unlist
以获得预期的输出。
library(data.table)
setDT(data)[, unlist(lapply(.SD, function(x) list(Sum=sum(x), Mean = mean(x))),
recursive=FALSE), by = .(year, company), .SDcols = IQ:CashQ]
# year company IQ.Sum IQ.Mean REVQ.Sum REVQ.Mean AssetQ.Sum AssetQ.Mean CashQ.Sum CashQ.Mean
#1: 1984 xray 36.2510271 9.0627568 -16.814705 -4.2036762 -1.218832 -0.3047081 -31.500185 -7.875046
#2: 1985 xray 7.2565640 1.8141410 -11.509279 -2.8773198 -4.900577 -1.2251443 -5.229553 -1.307388
#3: 1984 kilo 0.6851807 0.1712952 -2.022284 -0.5055711 14.593264 3.6483161 -22.693697 -5.673424
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.