Исключая конкретные столбцы из суммы в R - PullRequest
2 голосов
/ 04 июля 2019

Мне удалось суммировать столбцы с помощью различных положительных методов получения имен столбцов. Но для моего кода нужно использовать отрицательный метод !.

У меня есть вектор символов,

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 ]

2 голосов
/ 04 июля 2019

Используйте 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 голос
/ 04 июля 2019

Мы можем использовать 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(`+`)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...