gpt4 book ai didi

r - 分组 DataFrame 并根据分组对多列中的行进行平均,忽略零

转载 作者:行者123 更新时间:2023-12-02 09:36:24 24 4
gpt4 key购买 nike

我的数据框 data 如下所示:

Week  Group   Cost   Revenue
Wk1 A 104 148
Wk1 A 0 159
Wk1 A 92 151
Wk1 A 113 144
Wk1 B 331 500
WK1 B 325 524
Wk1 B 363 488
Wk1 B 0 497
Wk2 A 132 0
.
.
.

这是我用来从无序的 csv 文件中获取的 R 代码:

library(dplyr)
d <- read.csv(...)
data <- tbl_df(d)
data <- arrange(data, Group, Week)

我需要根据它们所属的组和周对数据框的成本和收入列中的值进行平均。

例如,我想要第 1 周 A 组的平均收入和成本。

结果值看起来像(我不确定格式,只是显示我应该得到的值):

Week  Group   Avg Cost   Avg Revenue
Wk1 A 103 150.5
Wk1 B 339.6 502.25
.
.
.

问题:我如何对按他们的组和他们的周分组的列进行平均,以便获得上述所需的结果?我想使用 dplyr 包来执行此操作。

问题:
我的一些行有零。我不想对零进行平均(所以不是 (104 + 0 + 92 + 113)/4 而是忽略它们所以 (104 + 92 + 113)/3 ).我也不能简单地用 filter() 去除带零的行,因为通常只有我的 Cost 或 Revenue 列之一有零,而不是两个。

我知道我可以使用 mean()summarize() 进行平均,但不确定如何按照我需要的方式对均值进行分组并在计算中忽略零。

谢谢!

最佳答案

我想我应该添加一个 dplyr 答案。

首先,您可以在 summarise 中执行此操作,使用提取函数 ( [].

require(dplyr)

dat %>% group_by(Week, Group) %>%
summarise(Cost = mean(Cost[Cost > 0]), Revenue = mean(Revenue[Revenue > 0]))

在输入效率方面,summarise_each 是另一个有用的选项,在这种情况下您想要在多个列上使用相同的函数。您可以利用 . 编码从每个数字变量中删除任何 0 值,因为您采用 mean.

dat %>% group_by(Week, Group) %>%
summarise_each(funs(mean(.[. > 0])))

关于r - 分组 DataFrame 并根据分组对多列中的行进行平均,忽略零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25753646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com