【问题标题】:R coding: How to take a conditional sum/mean with multiple conditions in a dataframeR编码:如何在数据框中采用多个条件的条件和/均值
【发布时间】:2016-06-30 14:23:57
【问题描述】:

我有一个包含公司季度数据的数据框,并希望在两个条件下获取所有四个季度的年平均值或总和(基于变量类型):年份和公司。

例如,公司 i 在 1984 年的平均库存价值和总收入分别为 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

我在下面包含了示例 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 coding: How to keep records with 4 complete quarters of data

任何帮助将不胜感激。谢谢~M

【问题讨论】:

  • 你上一个问题有很多线索指向你需要去的地方;您可以调整任何方法,例如library(dplyr) ; data %&gt;% group_by(year, company) %&gt;% summarise_each(funs(sum, mean), -qtr) 使用文档和小插图。
  • dplyr 很神奇,谢谢@alistaire

标签: r


【解决方案1】:

我们可以使用data.table。将'data.frame'转换为'data.table'(setDT(data)),按'year'、'company'分组,我们循环遍历.SDcols中指定的列(.SD),得到@987654325 @ 和 sdunlist 以获得预期的输出。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-02
    • 2019-11-06
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2015-04-11
    • 2023-02-02
    相关资源
    最近更新 更多