首先,使用带有空格的变量名不是很明智。请改用积分,例如"Group.1"。
其次,虽然c("Group 1","Group 2") 有效,但-c("Group 1","Group 2") 无效,因为您正在尝试使用字符进行算术运算:- "Group.1" 没有多大意义,不是吗?
所以我们可以使用%in% 和which() 一起使用,这是一种匹配运算符,它给出了元素的索引。
remover <- function(input) {
input <- input[, -which(names(input) %in% c("Group.1", "Group.2"))]
return(input)
}
x1 <- remover(df1)
> x1
X1 X2
1 4 10
2 5 11
3 6 12
还有另一个选项可以实现对 colnames 的否定,而不是 -。我们可以使用!。
remover2 <- function(input) {
input <- input[, which(!names(input) %in% c("Group.1", "Group.2"))]
return(input)
}
使用! 可能会有一点速度优势。
Unit: microseconds
expr min lq mean median uq max neval cld
remover(df1) 26.789 28.065 30.27720 28.321 28.831 18419.152 1e+05 a
remover2(df1) 26.534 27.810 30.09483 28.065 28.576 6056.713 1e+05 a
> all.equal(x1, x2)
[1] TRUE
数据:
df1 <- data.frame(matrix(1:12,
3, 4,
dimnames=list(NULL, c("Group.1", "X1",
"Group.2", "X2"))))