R - 根据条件组合行以获得平均值/平均值
Posted
技术标签:
【中文标题】R - 根据条件组合行以获得平均值/平均值【英文标题】:R - Combine rows to get average/mean based on conditions 【发布时间】:2021-06-23 16:13:44 【问题描述】:嘿,我有一个关于合并行以获得列的平均值的问题,基于 R 中列值的条件。
我想合并数据框中的 2 行,以根据其他列的条件获取列的平均值: 例如(参见下面的数据集示例)当列:depth == 20 & Species == "Diatoms" & locationID =="A",我想得到列数量的平均值,将此值添加到2 行中的 1 行并删除另一行。
structure(list(depth = c(20, 20, 2, 4, 10), Species = c("Diatoms",
"Diatoms", "Dinoflagellates", "Dinoflagellates", "Ciliates"),
locationID = c("A", "A", "B", "C", "A"), quantity = c(2,
4, 1, 2, 5)), row.names = c(NA, -5L), class = c("tbl_df",
"tbl", "data.frame"))```
【问题讨论】:
你能更新你的示例代码吗?您发布的代码不起作用,也不会生成数据框。 【参考方案1】:由于看起来您的数据框设置为 tibble,我猜您正在使用 dplyr。在这种情况下,您应该能够使用group_by()
和summarize()
的组合来执行您想要执行的操作。您是在寻找每个物种、位置和配对的平均数量,还是只寻找一个?
使用 mtcars 数据集的示例:
library(dplyr)
mtcars %>%
group_by(gear, cyl,carb)%>%
summarize(hp.mean = mean(hp))
# # A tibble: 12 x 4
# # Groups: gear, cyl [8]
# gear cyl carb hp.mean
# <dbl> <dbl> <dbl> <dbl>
# 1 3 4 1 97
# 2 3 6 1 108.
# 3 3 8 2 162.
# 4 3 8 3 180
# 5 3 8 4 228
# 6 4 4 1 72.5
# 7 4 4 2 79.5
# 8 4 6 4 116.
这种方法将所有行与匹配的 gear、cyl 和 carb 合并,并对所有匹配行的 hp 进行平均(在这种情况下)。
另一方面,如果您只想要一个案例的平均值,您可以子集或过滤然后取平均值。
mtcars %>%
filter(
gear == 3,
cyl == 8,
carb == 3
) %>%
pull(hp) %>%
mean()
# [1] 180
# base approach to return single answer
mean(mtcars$hp[mtcars$gear == 3 &
mtcars$cyl == 8 &
mtcars$carb == 3
])
# [1] 180
【讨论】:
以上是关于R - 根据条件组合行以获得平均值/平均值的主要内容,如果未能解决你的问题,请参考以下文章