如何计算R中tbl列表中多列的百分比?

kat*_*tus 1 r percentage dplyr tidyr

假设我有一个像这样的列表(以 tbl 格式):

       Type.1 count averageTotal averageHP averageAttack averageDefense averageSpAtk averageSp..Def averageSpeed
       (fctr) (int)        (dbl)     (dbl)         (dbl)          (dbl)        (dbl)          (dbl)        (dbl)
 1       Bug    69     378.9275  56.88406      70.97101       70.72464     53.86957       64.79710     61.68116
 2      Dark    31     445.7419  66.80645      88.38710       70.22581     74.64516       69.51613     76.16129
 3    Dragon    32     550.5312  83.31250     112.12500       86.37500     96.84375       88.84375     83.03125
 4  Electric    44     443.4091  59.79545      69.09091       66.29545     90.02273       73.70455     84.50000
 5     Fairy    17     413.1765  74.11765      61.52941       65.70588     78.52941       84.70588     48.58824
Run Code Online (Sandbox Code Playgroud)

如果我想计算平均总列中每列的百分比(每行),我将如何进行?

具体来说,我想要的结果是这样的:

      Type.1 count averageTotal averageHP averageAttack averageDefense averageSpAtk averageSp..Def averageSpeed
      (fctr) (int)        (dbl)     (dbl)         (dbl)          (dbl)        (dbl)          (dbl)        (dbl)
1       Bug    69     378.9275    15.02%       18.73%         18.73%        14.21%       17.11%     16.29%
Run Code Online (Sandbox Code Playgroud)

lmo*_*lmo 6

这是基 R 中的一个简单方法:

df[, 4:9] <- df[, 4:9] / df[[3]]
Run Code Online (Sandbox Code Playgroud)

返回

df
    Type.1 count averageTotal averageHP averageAttack averageDefense averageSpAtk averageSp..Def averageSpeed
1      Bug    69     378.9275 0.1501186     0.1872944      0.1866443    0.1421633      0.1710013    0.1627783
2     Dark    31     445.7419 0.1498770     0.1982921      0.1575481    0.1674627      0.1559560    0.1708641
3   Dragon    32     550.5312 0.1513311     0.2036669      0.1568939    0.1759096      0.1613782    0.1508202
4 Electric    44     443.4091 0.1348539     0.1558175      0.1495131    0.2030241      0.1662225    0.1905689
5    Fairy    17     413.1765 0.1793850     0.1489180      0.1590262    0.1900626      0.2050114    0.1175968
Run Code Online (Sandbox Code Playgroud)

数字指的是列位置,因此第三列将列分为四到九列。这是按比例而不是百分比报告的,但你可以很容易地解决这个问题

df[, 4:9] <- round(100 * df[, 4:9] / df[[3]], 2)
Run Code Online (Sandbox Code Playgroud)

数据

df <- read.table(header=TRUE, text="       Type.1 count averageTotal averageHP averageAttack averageDefense averageSpAtk averageSp..Def averageSpeed
                 1       Bug    69     378.9275  56.88406      70.97101       70.72464     53.86957       64.79710     61.68116
                 2      Dark    31     445.7419  66.80645      88.38710       70.22581     74.64516       69.51613     76.16129
                 3    Dragon    32     550.5312  83.31250     112.12500       86.37500     96.84375       88.84375     83.03125
                 4  Electric    44     443.4091  59.79545      69.09091       66.29545     90.02273       73.70455     84.50000
                 5     Fairy    17     413.1765  74.11765      61.52941       65.70588     78.52941       84.70588     48.58824")
Run Code Online (Sandbox Code Playgroud)