如何计算 mean() 函数中使用了多少个值?

How to count how many values were used in a mean() function?

我正在尝试在数据框中创建一个列,其中包含每行的均值函数中使用了多少个值。

首先,我有一个这样的数据框 df

df <- data.frame(tree_id=rep(c("CHC01", "CHC02"),each=8), 
                 rad=(c(rep("A", 4),rep("B", 4), rep("A", 4), 
                 rep("C", 4))), year=rep(2015:2018, 4), 
                 growth= c(NA, NA, 1.2, 3.2, 2.1, 1.5, 2.3, 2.7, NA, NA, NA, 1.7, 3.5, 1.4, 2.3, 2.7))

然后,我创建了一个名为 avg_df 的新数据框,其中仅包含按 growth 分组的平均值=33=]tree_id 和

library(dplyr)

avg_df <- df%>%
  group_by(tree_id, year, add=TRUE)%>%
  summarise(avg_growth=mean(growth, na.rm = TRUE))

现在,我想在 avg_df 中添加一个新列,其中包含我用于计算每个 的平均增长的值tree_idyear,忽略 NA

示例:对于2015年的CHC01,结果为1,因为它是2.1和NA的平均值

2018年CHC01为2,因为结果是3.2和2.7的平均值

这是预期的输出:

avg_df$radii <- c(1,1,2,2,1,1,1,2)

tree_id  year avg_growth radii

CHC01    2015       2.1      1
CHC01    2016       1.5      1
CHC01    2017       1.75     2
CHC01    2018       2.95     2
CHC02    2015       3.5      1
CHC02    2016       1.4      1
CHC02    2017       2.3      1
CHC02    2018       2.2      2

*在我的真实数据中,radii中的值会从1到4不等。

谁能帮我解决这个问题?

非常感谢!

通过'tree_id'和'year'

分组后,我们可以得到非NA元素(!is.na(growth))的sum
library(dplyr)
df %>%
    group_by(tree_id, year) %>% 
    summarise(avg_growth=mean(growth, na.rm = TRUE), 
              radii = sum(!is.na(growth)))
# A tibble: 8 x 4
# Groups:   tree_id [2]
#  tree_id  year avg_growth radii
#  <fct>   <int>      <dbl> <int>
#1 CHC01    2015       2.1      1
#2 CHC01    2016       1.5      1
#3 CHC01    2017       1.75     2
#4 CHC01    2018       2.95     2
#5 CHC02    2015       3.5      1
#6 CHC02    2016       1.4      1
#7 CHC02    2017       2.3      1
#8 CHC02    2018       2.2      2

或使用data.table

library(data.table)
setDT(df)[, .(avg_growth = mean(growth, na.rm = TRUE), 
              radii = sum(!is.na(growth))), by = .(tree_id, year)]