【问题标题】:Error message in mutate function: no applicable method for 'mutate_' applied to an object of class "c('double', 'numeric')"mutate 函数中的错误消息:没有适用于“mutate_”的方法应用于类“c('double','numeric')”的对象
【发布时间】:2021-04-30 14:35:00
【问题描述】:

示例数据框:

df <- tibble(x = c('A', 'B', 'C'),
             y = c('D', 'E', 'F'),
             z = c(1, NA, 1))

我想使用 tidyr::fill 函数来替换向量 z 中的 NA 值。 我可以这样做:

df %>% 
  fill(z, .direction = 'down')
# A tibble: 3 x 3
  x     y         z
  <chr> <chr> <dbl>
1 A     D         1
2 B     E         1
3 C     F         1

我现在想尝试的是在将 fill() 函数应用于向量 z 时创建一个新变量(这样我就可以将原始向量 z 保留为 NA)。 我试过这个:

df %>% 
  mutate(z2 = fill(z, .direction = 'down'))

但我只收到以下错误消息:

no applicable method for 'mutate_' applied to an object of class "c('double', 'numeric')"

为什么我不能在 mutate 函数中使用 tidyr::fill?到目前为止我所学到的(而且我对 R 比较陌生)是我可以使用 mutate 中的其他函数,例如 dplyr::recode、case_when、fct_reorder 等来更改现有向量,然后重新定位更改为新变量。

最终结果应该是这样的:

# A tibble: 3 x 4
  x     y         z    z2
  <chr> <chr> <dbl> <dbl>
1 A     D         1     1
2 B     E        NA     1
3 C     F         1     1

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    使用来自zoona.locf 可能更容易,它需要vector/column 作为输入而不是tibble

    library(dplyr)
    library(zoo)
    df %>% 
        mutate(z2 = na.locf0(z))
    

    -输出

    # A tibble: 3 x 4
    #  x     y         z    z2
    #  <chr> <chr> <dbl> <dbl>
    #1 A     D         1     1
    #2 B     E        NA     1
    #3 C     F         1     1
    

    或者如果我们想使用fill,创建一个具有新名称的重复列,然后在其上应用fill,因为fill 的用法是

    fill(data, ..., .direction = c("down", "up", "downup", "updown"))

    data - 一个数据框。

    library(tidyr)
    df %>% 
        mutate(z2 = z) %>% 
        fill(z2, .direction = 'down')
    

    或者我们可以使用cur_data

    df %>%
        mutate(z2 = fill(cur_data(), z, .direction = 'down')$z)
    

    -输出

    # A tibble: 3 x 4
    #  x     y         z    z2
    #  <chr> <chr> <dbl> <dbl>
    #1 A     D         1     1
    #2 B     E        NA     1
    #3 C     F         1     1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-21
      • 2021-08-17
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      • 2022-10-05
      相关资源
      最近更新 更多