R: Построение функции для расчета% относительной частоты и применения их ко всем столбцам - PullRequest
2 голосов
/ 02 марта 2020

Я полный новичок в R и у меня есть некоторые проблемы со сборочными функциями ...

enter image description here

Мои данные выглядят так.

Я хотел бы построить функцию, чтобы можно было преобразовывать все значения в таблице в относительную частоту% для каждого столбца.

Например, для первого столбца я хотел бы разделить все значения в этом столбце на сумму столбцов (colSum) этого столбца.

Затем я хотел бы повторить это для всех столбцов.

Могу ли я изучить какие-либо функции? Я пытался применить функцию, но я не мог заставить ее работать.

Спасибо :)

Ответы [ 3 ]

3 голосов
/ 02 марта 2020

Другой вариант base R может быть:

sweep(df, 2, FUN = `/`, colSums(df))*100
3 голосов
/ 02 марта 2020

Используя функцию apply, вы можете выполнить:

apply(df,2, function(x) x/sum(x)*100)

Здесь я создал этот фиктивный пример, чтобы проиллюстрировать, как он работает:

 df <- data.frame(C1 = sample(1:100,5),
                   C2 = sample(1:100,5),
                   C3 = sample(1:100,5))

apply(df,2, function(x) x/sum(x)*100)

            C1        C2       C3
[1,] 32.903226 13.861386 19.59799
[2,] 27.096774  1.980198 16.33166
[3,]  3.870968 44.554455 17.58794
[4,] 15.483871 17.821782 21.85930
[5,] 20.645161 21.782178 24.62312  

Использование dplyr пакет, вы можете получить тот же вывод, используя mutate_all:

library(dplyr)
df %>% mutate_all(.funs = ~./sum(.)*100)

         C1        C2       C3
1 32.903226 13.861386 19.59799
2 27.096774  1.980198 16.33166
3  3.870968 44.554455 17.58794
4 15.483871 17.821782 21.85930
5 20.645161 21.782178 24.62312

Отвечает ли он на ваш вопрос?

2 голосов
/ 02 марта 2020

Мы можем повторить colSums, чтобы сохранить длину до деления в base R

df/colSums(df)[col(df)] * 100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...