Рассчитать процент из двух столбцов и добавить значение в новый фрейм данных - PullRequest
0 голосов
/ 04 декабря 2018

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

Occurrence    Total    Criteria1    Criteria2    Month
1             20       A            2016         Jan
5             50       B            2016         Feb
0             10       C            2016         Mar
1             50       A            2017         Jan
5             10       B            2017         Feb
0             20       C            2017         Mar

Новые фреймы данных будут выглядеть так:

(Jan)     2016    2017
A         0.05    0.02

(Feb)
B         0.1     0.5

(Mar)
C         0       0

Итак, я пытаюсь написать цикл for или что-то в этом роде.сопоставимый, который вычисляет процент случаев и затем добавляет их в новый пустой фрейм данных на основе критериев, по которым они были сгруппированы в первую очередь.Пока мой код выглядит так:

for(i in unique(data$month)){
df %>%
group_by(Criteria1, Criteria2) %>%
summarise(Perc = Occurrence / Total) %>%
spread(Criteria2, Perc)}

1 Ответ

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

Базовая опция R с использованием xtabs

xtabs(Perc ~ Criteria1 + Criteria2, transform(df, Perc = Occurrence / Total))
#    Criteria2
#Criteria1 2016 2017
#        A 0.05 0.02
#        B 0.10 0.50
#        C 0.00 0.00

Или опция tidyverse

library(tidyverse)
df %>%
    group_by(Criteria1, Criteria2) %>%
    summarise(Perc = Occurrence / Total) %>%
    spread(Criteria2, Perc)
## A tibble: 3 x 3
## Groups:   Criteria1 [3]
#  Criteria1 `2016` `2017`
#  <fct>      <dbl>  <dbl>
#1 A           0.05   0.02
#2 B           0.1    0.5
#3 C           0      0

Обновление

Для ваших обновленных данных

df %>%
    group_by(Criteria1, Criteria2, Month) %>%
    summarise(Perc = Occurrence / Total) %>%
    spread(Criteria2, Perc)
## A tibble: 3 x 4
## Groups:   Criteria1 [3]
#  Criteria1 Month `2016` `2017`
#  <fct>     <fct>  <dbl>  <dbl>
#1 A         Jan     0.05   0.02
#2 B         Feb     0.1    0.5
#3 C         Mar     0      0

Или что-то подобное в базе R

xtabs(
    Perc ~ Criteria1 + Criteria2, 
    transform(df, Perc = Occurrence / Total, Criteria1 = paste(Criteria1, Month, sep = "_")))
#    Criteria2
#Criteria1 2016 2017
#A_Jan 0.05 0.02
#B_Feb 0.10 0.50
#C_Mar 0.00 0.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...