Напишите функцию для расчета процента и поместите ее в новый столбец фрейма данных - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть фрейм данных, в котором спортсмен получает оценку «Хорошо», «Удовлетворительно» и «Плохо».

Я хотел бы написать функцию, которая выполняет следующие действия:

Создает новый фрейм данных, содержащий имя спортсмена Процент раз, когда спортсмен получил оценку «Хорошо»

Player <- c("Jordan", "Jordan", "Jordan", "Jordan", "Jordan", "Jordan", 
"Jordan","Jordan","Jordan", "Barkley", "Barkley", "Barkley", "Barkley", 
"Barkley", "Olajuwon", "Olajuwon", "Olajuwon", "Olajuwon", "Olajuwon", 
"Kemp", "Kemp", "Kemp", "Kemp", "Kemp", "Kemp")

Rating <- c("Good", "Fair", "Good", "Good", "Good", "Poor", "Good", "Good",  
"Good", "Fair", "Fair", "Poor", "Good", "Good", "Good", "Fair", "Good", 
"Fair", "Good", "Good", "Good", "Good", "Good", "Good", "Poor")

df <- data.frame(Player, Rating)

Я хотел бы получить вывод:

Player    PercentGood
Jordan    77.8%
Barkley   40.0%
Olajuwon  60.0%
Kemp      83.3%

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

Итак, файл отправлен, я применяю код и создаю новый фрейм данных, который дает мне сводку процента того, что спортсмен получил оценку «Хорошо»

Спасибо.

1 Ответ

0 голосов
/ 14 декабря 2018

Вот решение tidyverse, использующее scales::percent для форматирования в процентах.

Сначала создается новая переменная good или не кодируется как 1 или 0. Затем процент 1с рассчитывается для каждогоигрок.

library(tidyverse)
library(scales)
df %>% mutate(good = ifelse(Rating == "Good", 1, 0)) %>% 
  group_by(Player = fct_inorder(Player)) %>% 
  summarise(PercentGood = percent(mean(good)))

# A tibble: 4 x 2
#  Player   PercentGood
#  <fct>    <chr>  
#1 Jordan   77.8%  
#2 Barkley  40.0%  
#3 Olajuwon 60.0%  
#4 Kemp     83.3% 
...