我尝试根据不同的条件计算数据框中不同列的总和。
这是我的试验数据:
Year <- c(2001, 2001, 2001, 2002, 2002, 2003, 2003, 2004, 2004)
COMP1 <- c(NA, 1, 2, 6, 9, NA, 2, 1, NA)
COMP2 <- c(2, 3, 3, 3, 6, 4, > 1, 0, 1)
COMP3 <- c(NA, 1, 2, 3, 4, 0, 0, 1, 0)
COMP4 <- c(25, 29, 16, 17, NA, 20, NA, 21, 12)
DF <- data.frame(Year, COMP1, COMP2, COMP3, COMP4)
这就是我想做的:
对于每一年和每一家公司(COMP),我想计算值的总和,但仅当单元格中的单个值高于该年内值的平均值时)。
我已经实现了计算总和和平均值,但我不知道如何将它们结合起来创造一个总和与所提到的条件。
以下是我到目前为止尝试过的公式(请注意,我的原始样本有6121列不同公司的列):
SUM <- aggregate(DF[, 2:6121], list(DF$Year), sum)
MEAN <- aggregate(DF[, 2:6121], list(DF$Year), mean)
3条答案
按热度按时间brgchamk1#
包括等于和高于组平均值的值:
tmb3ates2#
dplyr/tidyr
我认为Chamkrai的答案对dplyr来说是最简单的,但我倾向于发现处理数据更像是“长”格式,所以我将保留这个格式。看看中间值(紧接着
pivot_longer
之后,然后是summarize
之后和pivot_wider
之前),就明白我的意思了。base R
使用
use
,我们可以调整quux
中的值,以便将不高于平均值的值归零:现在我们可以使用
aggregate
:data.table
数据
bwntbbo33#
使用
data.table
: