如何计算 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_id 和 year,忽略 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)]
我正在尝试在数据框中创建一个列,其中包含每行的均值函数中使用了多少个值。
首先,我有一个这样的数据框 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_id 和 year,忽略 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)]