【问题标题】:Mutating many columns [duplicate]改变许多列[重复]
【发布时间】:2021-12-01 17:26:27
【问题描述】:

我正在尝试将几列与 mutate (dplyr) 函数结合起来。它适用于 + 和列的各个名称。但是我需要一些命令来改变从列“a”到列“c”的所有列,而不必按名称写下每一列并且没有列 d。

其中还有一些 NA,我想“忽略”它们,但我得到的只是一个新列,上面写着“TRUE” 有人可以帮我吗?

例子

a<-c(1,2,3,4,5)
b<-c(6,7,NA,9,10)
c<-c(11,12,13,14,NA)
d<-c(16,17,NA,19,20)

df<-data.frame(a,b,c,d)
df2<-dplyr::mutate(df,E=(a+b+c),na.rm=T)

我很想拥有这样的东西:

df3<-dplyr::mutate(df,E=(a to c),na.rm=T)

【问题讨论】:

  • 使用 rowSums:df$E &lt;- rowSums(df[, 1:3], na.rm = TRUE)

标签: r dplyr na


【解决方案1】:

怎么样(我没有注意到NA's 但我不确定你是否想要那个专栏)

df %>%
  rowwise %>%
  mutate(E=rowSums(across(where(is.numeric)), na.rm = TRUE), 
         narm = any(is.na(across(everything()))))

      a     b     c     d     E narm 
  <dbl> <dbl> <dbl> <dbl> <dbl> <lgl>
1     1     6    11    16    34 FALSE
2     2     7    12    17    38 FALSE
3     3    NA    13    NA    16 TRUE 
4     4     9    14    19    46 FALSE
5     5    10    NA    20    35 TRUE 

【讨论】:

    【解决方案2】:
    library(tidyverse)
    
    a <- c(1,2,3,4,5)
    b <- c(6,7,NA,9,10)
    c <- c(11,12,13,14,NA)
    d <- c(16,17,NA,19,20)
    
    df <- tibble(
      a, b, c, d
    )
    
    df %>% 
      replace(is.na(.), 0) %>% 
      mutate(E = rowSums(across(where(is.numeric))))
    #> # A tibble: 5 × 5
    #>       a     b     c     d     E
    #>   <dbl> <dbl> <dbl> <dbl> <dbl>
    #> 1     1     6    11    16    34
    #> 2     2     7    12    17    38
    #> 3     3     0    13     0    16
    #> 4     4     9    14    19    46
    #> 5     5    10     0    20    35
    

    reprex package (v2.0.1) 于 2021 年 10 月 13 日创建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-22
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多