Ошибка в UseMethod ("group_by_"): нет применимого метода для group_by_, примененного к объекту класса "персонаж" - PullRequest
1 голос
/ 18 февраля 2020

Это код:

PRICE <- as.vector(my.data[,"PRICE"])
ADDRESS_CITY_NAME <- as.vector(my.data[,"ADDRESS_CITY_NAME"])

my.data <- data.frame(ADDRESS_CITY_NAME,log(UNITS), log(PRICE))

my.data %>%
  +group_by(ADDRESS_CITY_NAME)%>%
  +do(tidy(lm(UNITS~PRICE, data=my.data))

Данные, которые я использовал (часть):

287      INDEPENDENCE  4.1108739  0.42526774
288      INDEPENDENCE  4.1431347  0.47000363
289      INDEPENDENCE  4.2766661  0.17395331
290      INDEPENDENCE  4.0604430  0.46373402
291          LOVELAND  4.3820266  0.38526240
292          LOVELAND  4.2626799  0.42526774
293          LOVELAND  4.1271344  0.51282363
294          LOVELAND  4.8040210  0.43178242
295          LOVELAND  4.1896547  0.37843644
296          LOVELAND  4.2766661  0.32930375
297          LOVELAND  4.4543473  0.39204209
298          LOVELAND  4.3820266  0.39877612
299          LOVELAND  3.7841896  0.43178242

Я получаю сообщение об ошибке: Ошибка в UseMethod ("group_by_") : нет применимого метода для 'group_by_', примененного к объекту класса "персонаж"

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

На этапе создания data.frame имена столбцов были изменены

my.data <- data.frame(ADDRESS_CITY_NAME,log(UNITS), log(PRICE))

Вместо этого будет

my.data <- data.frame(ADDRESS_CITY_NAME,UNITS = log(UNITS), PRICE = log(PRICE))
0 голосов
/ 18 февраля 2020

Я использовал часть ваших данных и поиграл с новым синтаксисом dplyr 0.8.3

pacman::p_load(tidyverse, broom)

my.data <- tibble::tribble(
  ~ADDRESS_CITY_NAME,    ~UNITS,     ~PRICE,
      "INDEPENDENCE", 4.1108739, 0.42526774,
      "INDEPENDENCE", 4.1431347, 0.47000363,
      "INDEPENDENCE", 4.2766661, 0.17395331,
      "INDEPENDENCE",  4.060443, 0.46373402,
          "LOVELAND", 4.3820266,  0.3852624,
          "LOVELAND", 4.2626799, 0.42526774,
          "LOVELAND", 4.1271344, 0.51282363,
          "LOVELAND",  4.804021, 0.43178242,
          "LOVELAND", 4.1896547, 0.37843644,
          "LOVELAND", 4.2766661, 0.32930375,
          "LOVELAND", 4.4543473, 0.39204209,
          "LOVELAND", 4.3820266, 0.39877612,
          "LOVELAND", 3.7841896, 0.43178242
  )

Затем я использовал найденный здесь синтаксис для новых функций, упрощая применение функции для каждой группы.

https://dplyr.tidyverse.org/reference/group_map.html

Следующий синтаксис подойдет для каждой группы lm и вернет таблицу с коэффициентами и значениями p:

my.data %>%
  group_by(ADDRESS_CITY_NAME)%>%
  group_modify(~ tidy(lm(log(UNITS) ~ log(PRICE), data=.x)))

Возвращает желаемый результат :

# A tibble: 4 x 6
# Groups:   ADDRESS_CITY_NAME [2]
  ADDRESS_CITY_NAME term        estimate std.error statistic  p.value
  <chr>             <chr>          <dbl>     <dbl>     <dbl>    <dbl>
1 INDEPENDENCE      (Intercept)   1.38      0.0139    98.9   0.000102
2 INDEPENDENCE      log(PRICE)   -0.0426    0.0125    -3.40  0.0767  
3 LOVELAND          (Intercept)   1.37      0.179      7.68  0.000118
4 LOVELAND          log(PRICE)   -0.0902    0.197     -0.457 0.662

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

Кредит идет на этот великолепный блог: https://drsimonj.svbtle.com/running-a-model-on-separate-groups

broomed <- my.data %>%
  nest(-ADDRESS_CITY_NAME)%>%
  mutate(fit=map(data, ~ lm(log(UNITS) ~ log(PRICE), data = .)),
         glanced = map(fit, glance),
         augmented = map(fit, augment),
         tidied = map(fit,tidy))


broomed %>% unnest(glanced)

broomed %>% unnest(augmented) 

broomed %>% unnest(tidied)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...