【问题标题】:Error in UseMethod("group_by_") : no applicable method for 'group_by_' applied to an object of class "character"UseMethod(“group_by_”)中的错误:没有适用于“group_by_”的适用方法应用于“字符”类的对象
【发布时间】:2020-02-18 17:23:35
【问题描述】:

这是代码:

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_”的方法应用于“字符”类的对象

【问题讨论】:

    标签: r group-by


    【解决方案1】:

    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))
    

    【讨论】:

    • 谢谢,但我仍然收到错误:UseMethod("group_by_") 中的错误:没有适用于 'group_by_' 的方法应用于“字符”类的对象
    • @new_R 我看到++group_by(ADDRESS_CITY_NAME)
    【解决方案2】:

    我使用了你的部分数据并使用更新的 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 2018-06-25
      • 2019-04-07
      • 2023-04-06
      • 1970-01-01
      • 2019-09-12
      • 2022-12-15
      相关资源
      最近更新 更多