dplyr: group_by + суммирование не работает, как ожидалось - PullRequest
1 голос
/ 29 января 2020

У меня возникли некоторые проблемы с использованием R group_by и функций суммирования, и мне было интересно, не могли бы вы помочь мне. У меня есть таблица, подобная этой:

Category     Frequency
    First        1
    First        4
    Second       6
    First        1
    Third        1
    Third        2
    Second       6
    First        2
    Second       1

Я пытаюсь использовать dplyr group_by и суммировать, чтобы найти среднее значение столбца частоты. Вот мой пример кода:

    table %>%
         group_by(table$Category) %>%
         summarize(meanfrequency = mean(table$frequency))

То, что я ожидал бы, было бы для таблицы, которая будет разбита, которая разбивает среднюю частоту, сгруппированную по отдельной категории, например:

Category     Frequency
    First        2
    Second       4.33
    Third        1.5

Однако, что я получаю, так это таблицу, сгруппированную по категориям, где каждая категория получает значение среднего значения ВСЕЙ таблицы, например так:

   Category     Frequency
    First        2.66
    Second       2.66
    Third        2.66

Любой ключ к пониманию того, что здесь происходит? Я должен сказать, что я новичок, поэтому, возможно, я упускаю что-то очевидное. Я должен отметить, что в моей фактической таблице есть несколько переменных в таблице, кроме двух, которые я пытаюсь проанализировать, но не уверен, что это актуально или может что-то испортить. Я также загрузил эти данные в R, используя встроенный в Rstudio пакет readxcl.

Заранее спасибо!

1 Ответ

1 голос
/ 29 января 2020

Мы извлекаем весь столбец с помощью $, вместо этого мы можем просто использовать имя столбца без кавычек, чтобы получить только значения частоты в каждой категории,

library(dplyr)
table %>%
     group_by(Category) %>%
     summarize(meanfrequency = mean(Frequency))
# A tibble: 3 x 2
#  Category meanfrequency
#  <chr>            <dbl>
#1 First             2   
#2 Second            4.33
#3 Third             1.5 

Если мы делаем table$Frequency внутри цепочки, это похоже на то, что мы делаем снаружи. Кроме того, R чувствителен к регистру, поэтому нужно table$Frequency вместо table$frequency

mean(table$Frequency) 

Кроме того, table - это имя функции / класса, поэтому лучше не называть объекты с помощью эти имена

данные

table <- structure(list(Category = c("First", "First", "Second", "First", 
"Third", "Third", "Second", "First", "Second"), Frequency = c(1L, 
4L, 6L, 1L, 1L, 2L, 6L, 2L, 1L)), class = "data.frame", row.names = c(NA, 
-9L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...