R编码:如何在一个数据帧中获取具有多个条件的条件和/平均值

R编码:如何在一个数据帧中获取具有多个条件的条件和/平均值,r,R,我有一个包含公司季度数据的数据框架,并希望在两个条件下,计算所有四个季度的年平均值或总和(基于变量类型):年份和公司 例如,1984年的i公司将有一个平均存货价值和总收入,分别是基于四个不同的季度价值的1984年和1984年。我目前正在使用这些代码行-用于平均值和总和-但R不断返回“NA”,我搜索了又搜索,但似乎没有任何效果: Companyi_I1984 <- with(R, mean(I [FY == "1984" & Co == "AAR CORP" ])) Companyi

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

例如,1984年的i公司将有一个平均存货价值和总收入,分别是基于四个不同的季度价值的1984年和1984年。我目前正在使用这些代码行-用于平均值和总和-但R不断返回“NA”,我搜索了又搜索,但似乎没有任何效果:

Companyi_I1984 <- with(R, mean(I [FY == "1984" & Co == "AAR CORP" ]))
Companyi_REV1984 <- with(R, sum(REVQ [FY == "1984" & Co == "AAR CORP" ]))

Companyi\u I1984我们可以使用
data.table
。将'data.frame'转换为'data.table'(
setDT(data)
),按'year'、'company'分组,我们循环遍历
.SDcols
中指定的列(
.SD
),获得
SD
,以及
未列出
)以获得预期的输出

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

你的前一个问题有很多线索指向你需要去的地方;您可以采用任何方法,例如
library(dplyr);数据%>%按(年份、公司)分组%>%总结(funs(sum,mean),-qtr)
使用文档和渐晕图。dplyr很神奇,谢谢@alistaire
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