基于R的另一列中的数据框中的逐步列总和

发布于 2025-01-24 08:18:27 字数 1859 浏览 0 评论 0原文

数据
这样

32.5
b15
b63

平均(x)是X的所有以前实例的平均值,而团队相同。我有以下R码获得总体平均值,但是我正在寻找“逐步”平均值。

    new_df <- df %>% group_by(Team) %>% summarise(avg_x = mean(x))

有没有办法对此进行矢量化,同时仅评估每个“迭代”上的先前行?

I have a data frame like this:

TeamGF
A3
B5
A2
A3
B1
B6

Looking for output like this (just an additional column):

Teamxavg(X)
A30
B50
A23
A32.5
B15
B63

avg(x) is the average of all previous instances of x where Team is the same. I have the following R code which gets the overall average, however I'm looking for the "step-wise" average.

    new_df <- df %>% group_by(Team) %>% summarise(avg_x = mean(x))

Is there a way to vectorize this while only evaluating the previous rows on each "iteration"?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月棠 2025-01-31 08:18:27

您需要Cummean()函数从dplyr,与lag()

df %>% group_by(Team) %>% mutate(avg_x = replace_na(lag(cummean(x)), 0))

生成以下内容:

# A tibble: 6 × 3
# Groups:   Team [2]
  Team      x avg_x
  <chr> <dbl> <dbl>
1 A         3   0
2 B         5   0
3 A         2   3
4 A         3   2.5
5 B         1   5
6 B         6   3

根据需要。

编辑1:

AS @ritchie sacramento 指出,以下内容更加清晰,更清晰:

df %>% group_by(Team) %>% mutate(avg_x = lag(cummean(x), default = 0))

You want the cummean() function from dplyr, combined with lag():

df %>% group_by(Team) %>% mutate(avg_x = replace_na(lag(cummean(x)), 0))

Producing the following:

# A tibble: 6 × 3
# Groups:   Team [2]
  Team      x avg_x
  <chr> <dbl> <dbl>
1 A         3   0
2 B         5   0
3 A         2   3
4 A         3   2.5
5 B         1   5
6 B         6   3

As required.

Edit 1:

As @Ritchie Sacramento pointed out, the following is cleaner and clearer:

df %>% group_by(Team) %>% mutate(avg_x = lag(cummean(x), default = 0))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文