英文:
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 <- 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")

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 <- aggregate(Sales ~ Year + NAame, data = sales, FUN=sum)
DFC48 <- aggregate(DF, NA_Sales~Year, FUN=sum)
答案1
得分: 2
Base R:
我们可以使用 ave() 函数。在这里,我们可以将函数 x/sum(x) 应用于每个分组 Year,其中 x 由 sales$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 <- 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 %>% group_by(Year) %>% mutate(su=Sales/sum(Sales))
<sup>创建于2023-02-17,使用 reprex v2.0.2</sup>
# A tibble: 10 × 4
# Groups:   Year [2]
    Year Name         Sales     su
   <dbl> <chr>        <dbl>  <dbl>
 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 %>% group_by(Year) %>% mutate(su=Sales/sum(Sales))
<sup>Created on 2023-02-17 with reprex v2.0.2</sup>
# A tibble: 10 × 4
# Groups:   Year [2]
    Year Name         Sales     su
   <dbl> <chr>        <dbl>  <dbl>
 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 %>%
  group_by(Year) %>%
  mutate(su = prop.table(Sales))
#> # A tibble: 10 × 4
#> # Groups:   Year [2]
#>     Year Name        Sales     su
#>    <int> <chr>       <dbl>  <dbl>
#>  1  1980 Atari        4    0.789 
#>  2  1980 Activision   1.07 0.211 
#>  3  1981 Activision   4.21 0.308 
#>  4  1981 ParkerBros.  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
<sup>Created on 2023-02-18 with reprex v2.0.2</sup>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论