我已经能够通过各种检索列名的肯定方法对列求和。但是,需要对我的代码使用否定方法!
。
我有一个字符向量,
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
的错误。
答案 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(`+`)))