繁体   English   中英

R编码:如何在数据帧中采用具有多个条件的条件和/均值

[英]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 ,得到sumsd ,并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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM