从R中的总和中排除特定的列

时间:2019-07-04 03:42:40

标签: r sum

我已经能够通过各种检索列名的肯定方法对列求和。但是,需要对我的代码使用否定方法!

我有一个字符向量,

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 个答案:

答案 0 :(得分:2)

使用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})

答案 1 :(得分:1)

我们可以使用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(`+`)))