【问题标题】:`summarise_each_()` is deprecated as of dplyr 0.7.0. Please use `across()` instead. Problem with `summarise()` input `..1`从 dplyr 0.7.0 开始不推荐使用“summarise_each_()”。请改用 `across()`。 `summarise()` 输入 `..1` 的问题
【发布时间】:2020-09-18 16:54:23
【问题描述】:

我有这个并且它有效:

data %>%
        select_if(function(x) any(is.na(x))) %>% 
        summarise_each(funs(sum(is.na(.))))

警告信息: summarise_each() 自 dplyr 0.7.0 起已弃用。 请改用across()

当我更改 sumarise_each() 时:

data %>%
        select_if(function(x) any(is.na(x))) %>% 
        summarise(across(funs(sum(is.na(.)))))

发生这种情况:

错误:summarise() 输入有问题 ..1
x 必须使用有效的下标向量对列进行子集化。
x 下标类型错误fun_list
ℹ 必须是数字或字符。
ℹ 输入..1across(funs(sum(is.na(.))))

我想用 cross 函数更新我的代码。

【问题讨论】:

  • 如果您提供一个可重现的示例来说明您正在使用的数据以及您希望预期输出的样子,您可能会得到更好的响应。您首先要查看的是summarise(across()) 所期望的参数顺序。 across 的第一个参数应该是您希望应用函数的列。如果没有看到您的数据或不了解您正在尝试做什么,将很难提供除此之外的建议。您正在尝试选择所有至少有 1 个 NA 的列?

标签: r tidyverse


【解决方案1】:

这样做的方法是:

library(dplyr)
df %>%
  summarize(across(where(~any(is.na(.)), ~sum(is.na(.)))) 

starwars %>% 
  summarise(across(where(~any(is.na(.))), ~sum(is.na(.))))

 height  mass hair_color birth_year   sex gender homeworld species
   <int> <int>      <int>      <int> <int>  <int>     <int>   <int>
1      6    28          5         44     4      4        10       4

您不再需要 select_ifacross()across() 内的 where() 允许您进行逻辑检查。然后提供汇总功能。 ~ 表示法允许您执行引用数据的函数,其中点引用 eahc 列中的数据。

【讨论】:

    【解决方案2】:

    这就是我认为你正在尝试做的事情

        library(dplyr)
        df <- data.frame(id=c("001","002"), A = c(0,0), B= c(NA,0), C=c(NA,1))
        df
    
             id  A  B  C
    1        001 0 NA NA
    2        002 0  0  1
    
    
        df %>%
        select(where(function(x) any(is.na(x)))) %>%
        rowwise %>%
        mutate(sumNA = sum(is.na(c_across(everything()))))
    
        # A tibble: 2 x 3
        # Rowwise: 
           B      C    sumNA
         <dbl>  <dbl>  <int>
      1    NA    NA     2
      2    0     1      0
    

    这会选择所有包含 NA 的列,然后添加一个新列来显示每行中有多少个 NA

    【讨论】:

      猜你喜欢
      • 2021-06-21
      • 2021-01-19
      • 2020-08-29
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 2017-12-07
      相关资源
      最近更新 更多