代码之家  ›  专栏  ›  技术社区  ›  ambrish dhaka

从r的和中排除特定列

sum r
  •  1
  • ambrish dhaka  · 技术社区  · 5 年前

    我已经能够通过检索列名的各种积极方法对列进行求和。但是,需要用否定的方法 ! 为了我的密码。

    我有一个字符向量,

    exc2 <- c("Product", "Kazakhstan", "Kyrgyzstan", "Tajikistan", "Turkmenistan", 
        "Uzbekistan", "CASIA", "CHINA2", "China", "China..Hong.Kong.SAR", 
        "China..Macao.SAR", "China..Taiwan.Province.of")
    

    我使用的代码如下:

    kazx5 <- lapply(kazx4, function(x) {x$RESTWORLD <- c(rowSums(x[ ,!c(exc2)], na.rm = T)); x})
    

    它给出了一个错误 !c(exc2) 作为 Error in !c(exc2) : invalid argument type 是的。

    2 回复  |  直到 5 年前
        1
  •  1
  •   akrun    5 年前

    我们可以利用 tidyverse 方法

    library(tidyverse)
    map(kazx4, ~ .x %>%
                     mutate(RESTWORLD = select(., -one_of(exc2)) %>%
              reduce(`+`))) 
    

    可复制示例 mtcars

    excN <- c("mpg", "disp")
    map(list(mtcars, mtcars), ~ .x %>%
           mutate(RESTWORLD = select(., -one_of(excN)) %>% 
                reduce(`+`)))
    
        2
  •  2
  •   Ronak Shah    5 年前

    使用 setdiff 删除列

    kazx5 <- lapply(kazx4, function(x) 
             {x$RESTWORLD <- rowSums(x[ ,setdiff(names(x), exc2)], na.rm = T); x})
    

    作为 ! 对字符值无效。


    使用 啊! 我们能做到

    kazx5 <- lapply(kazx4, function(x) 
             {x$RESTWORLD <- rowSums(x[ ,!names(x) %in% exc2], na.rm = T); x})