如何从基础年度总和中分离每年的数据

huangapple go评论62阅读模式
英文:

How to divide data from each year from sum of each year in base

问题

sales <- read.table(header = TRUE, text="Year Name Sales
1980 Atari 4.00
1980 Activision 1.07
1981 Activision 4.21
1981 ParkerBros. 2.06
1981 Imagic 1.99
1981 Atari 1.84
1981 Coleco 1.36
1981 Mystique 0.76
1981 Fox 0.74
1981 Men 0.72")

# 我能够使用aggregate函数得到销售总额。
# 我想将该年份的销售数据除以当年的总销售额,并得到百分比。
# 但我不知道如何将每行除以相应年份的总销售额。

DF <- aggregate(Sales ~ Year + Name, data = sales, FUN=sum)
DFC48 <- aggregate(DF$Sales ~ DF$Year, FUN=sum)

希望这有所帮助。

英文:
sales &lt;- read.table(header = TRUE, text=&quot;Year Name Sales
1980 Atari 4.00
1980 Activision 1.07
1981 Activision 4.21
1981 ParkerBros. 2.06
1981 Imagic 1.99
1981 Atari 1.84
1981 Coleco 1.36
1981 Mystique 0.76
1981 Fox 0.74
1981 Men 0.72&quot;)

如何从基础年度总和中分离每年的数据

I was able to get the sum using aggregate.
I want to divide sales data from that year's total sales and get the %. But I don't know how to divide each row from respective year's total sales.

DF &lt;- aggregate(Sales ~ Year + NAame, data = sales, FUN=sum)
DFC48 &lt;- aggregate(DF, NA_Sales~Year, FUN=sum)

答案1

得分: 2

Base R:

我们可以使用 ave() 函数。在这里,我们可以将函数 x/sum(x) 应用于每个分组 Year,其中 xsales$Sales 定义:

sales$su <- ave(sales$Sales, sales$Year, FUN = function(x) x/sum(x))
  Year        Name Sales         su
1  1980       Atari  4.00 0.78895464
2  1980  Activision  1.07 0.21104536
3  1981  Activision  4.21 0.30774854
4  1981 ParkerBros.  2.06 0.15058480
5  1981      Imagic  1.99 0.14546784
6  1981       Atari  1.84 0.13450292
7  1981      Coleco  1.36 0.09941520
8  1981    Mystique  0.76 0.05555556
9  1981         Fox  0.74 0.05409357
10 1981         Men  0.72 0.05263158
英文:

Base R:

We could use ave(). Here we can apply function x/sum(x) to each group Year, where x is defined by sales$Sales:

sales$su &lt;- ave(sales$Sales, sales$Year, FUN = function(x) x/sum(x))
  Year        Name Sales         su
1  1980       Atari  4.00 0.78895464
2  1980  Activision  1.07 0.21104536
3  1981  Activision  4.21 0.30774854
4  1981 ParkerBros.  2.06 0.15058480
5  1981      Imagic  1.99 0.14546784
6  1981       Atari  1.84 0.13450292
7  1981      Coleco  1.36 0.09941520
8  1981    Mystique  0.76 0.05555556
9  1981         Fox  0.74 0.05409357
10 1981         Men  0.72 0.05263158

答案2

得分: 1

请尝试下面的代码

``` r
data %&gt;% group_by(Year) %&gt;% mutate(su=Sales/sum(Sales))

<sup>创建于2023-02-17,使用 reprex v2.0.2</sup>

# A tibble: 10 &#215; 4
# Groups:   Year [2]
    Year Name         Sales     su
   &lt;dbl&gt; &lt;chr&gt;        &lt;dbl&gt;  &lt;dbl&gt;
 1  1980 Atari         4    0.789 
 2  1980 Activision    1.07 0.211 
 3  1981 Activision    4.21 0.308 
 4  1981 Parker Bros.  2.06 0.151 
 5  1981 Imagic        1.99 0.145 
 6  1981 Atari         1.84 0.135 
 7  1981 Coleco        1.36 0.0994
 8  1981 Mystique      0.76 0.0556
 9  1981 Fox           0.74 0.0541
10  1981 Men           0.72 0.0526

<details>
<summary>英文:</summary>

Could you please try the below code 


``` r
data %&gt;% group_by(Year) %&gt;% mutate(su=Sales/sum(Sales))

<sup>Created on 2023-02-17 with reprex v2.0.2</sup>

# A tibble: 10 &#215; 4
# Groups:   Year [2]
    Year Name         Sales     su
   &lt;dbl&gt; &lt;chr&gt;        &lt;dbl&gt;  &lt;dbl&gt;
 1  1980 Atari         4    0.789 
 2  1980 Activision    1.07 0.211 
 3  1981 Activision    4.21 0.308 
 4  1981 Parker Bros.  2.06 0.151 
 5  1981 Imagic        1.99 0.145 
 6  1981 Atari         1.84 0.135 
 7  1981 Coleco        1.36 0.0994
 8  1981 Mystique      0.76 0.0556
 9  1981 Fox           0.74 0.0541
10  1981 Men           0.72 0.0526

答案3

得分: 1

另一个选项是使用prop.table,如下所示:

library(dplyr)
sales %>%
  group_by(Year) %>%
  mutate(su = prop.table(Sales))

创建于2023-02-18,使用reprex v2.0.2

英文:

Another option using prop.table like this:

library(dplyr)
sales %&gt;%
  group_by(Year) %&gt;%
  mutate(su = prop.table(Sales))
#&gt; # A tibble: 10 &#215; 4
#&gt; # Groups:   Year [2]
#&gt;     Year Name        Sales     su
#&gt;    &lt;int&gt; &lt;chr&gt;       &lt;dbl&gt;  &lt;dbl&gt;
#&gt;  1  1980 Atari        4    0.789 
#&gt;  2  1980 Activision   1.07 0.211 
#&gt;  3  1981 Activision   4.21 0.308 
#&gt;  4  1981 ParkerBros.  2.06 0.151 
#&gt;  5  1981 Imagic       1.99 0.145 
#&gt;  6  1981 Atari        1.84 0.135 
#&gt;  7  1981 Coleco       1.36 0.0994
#&gt;  8  1981 Mystique     0.76 0.0556
#&gt;  9  1981 Fox          0.74 0.0541
#&gt; 10  1981 Men          0.72 0.0526

<sup>Created on 2023-02-18 with reprex v2.0.2</sup>

huangapple
  • 本文由 发表于 2023年2月18日 12:02:33
  • 转载请务必保留本文链接:https://go.coder-hub.com/75491093.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定