1、subset实现
> a <- 1:4
> b <- 5:8
> c <- letters[1:4]
> d <- LETTERS[1:4]
> dat <- data.frame(a, b, c, d)
> dat ## 测试数据框,共四列
a b c d
1 1 5 a A
2 2 6 b B
3 3 7 c C
4 4 8 d D
> subset(dat, select = -c) ## 删除单列, c列
a b d
1 1 5 A
2 2 6 B
3 3 7 C
4 4 8 D
> dat
a b c d
1 1 5 a A
2 2 6 b B
3 3 7 c C
4 4 8 d D
> subset(dat, select = -c(b, d)) ## 同时删除多列,删除b、d列
a c
1 1 a
2 2 b
3 3 c
4 4 d
2、%in% in实现
> a <- 1:4
> b <- 5:8
> c <- letters[1:4]
> d <- LETTERS[1:4]
> dat <- data.frame(a, b, c, d)
> dat ## 测试数据框
a b c d
1 1 5 a A
2 2 6 b B
3 3 7 c C
4 4 8 d D
> dat[, !names(dat) %in% "b"] ## 删除单列b
a c d
1 1 a A
2 2 b B
3 3 c C
4 4 d D
> dat
a b c d
1 1 5 a A
2 2 6 b B
3 3 7 c C
4 4 8 d D
> dat[,!names(dat) %in% c("a", "c")] ## 同时删除多列a、c
b d
1 5 A
2 6 B
3 7 C
4 8 D
3、grep实现
> a <- 1:4
> b <- 5:8
> c <- letters[1:4]
> d <- LETTERS[1:4]
> dat <- data.frame(a, b, c, d)
> dat ## 测试数据框
a b c d
1 1 5 a A
2 2 6 b B
3 3 7 c C
4 4 8 d D
> dat[, -grep("b", names(dat))] ## 删除单列b
a c d
1 1 a A
2 2 b B
3 3 c C
4 4 d D
> dat
a b c d
1 1 5 a A
2 2 6 b B
3 3 7 c C
4 4 8 d D
> dat[, -grep("a|c", names(dat))] ## 删除多列a、c
b d
1 5 A
2 6 B
3 7 C
4 8 D
4、grepl实现
> a <- 1:4
> b <- 5:8
> c <- letters[1:4]
> d <- LETTERS[1:4]
> dat <- data.frame(a, b, c, d)
> dat ## 测试数据框
a b c d
1 1 5 a A
2 2 6 b B
3 3 7 c C
4 4 8 d D
> dat[,!grepl("b", colnames(dat))] ## 删除单列b
a c d
1 1 a A
2 2 b B
3 3 c C
4 4 d D
> dat[,!grepl("b|d", colnames(dat))] ## 删除多列b、d
a c
1 1 a
2 2 b
3 3 c
4 4 d
5、dplyr包实现
> a <- 1:4
> b <- 5:8
> c <- letters[1:4]
> d <- LETTERS[1:4]
> dat <- data.frame(a, b, c, d)
> dat
a b c d
1 1 5 a A
2 2 6 b B
3 3 7 c C
4 4 8 d D
> library(dplyr)
> select(dat, -b) ## 删除单列b
a c d
1 1 a A
2 2 b B
3 3 c C
4 4 d D
> dat
a b c d
1 1 5 a A
2 2 6 b B
3 3 7 c C
4 4 8 d D
> select(dat, -c(a,c)) ## 删除多列a、c
b d
1 5 A
2 6 B
3 7 C
4 8 D