这里有一个快速的解决方案。假设,你有一个数据帧X,有三列a, B和C:
> X<-data.frame(A=c(1,2),B=c(3,4),C=c(5,6))
> X
A B C
1 1 3 5
2 2 4 6
如果我想删除一个列,比如B,只需在colnames上使用grep来获得列索引,然后可以使用它来省略该列。
> X<-X[,-grep("B",colnames(X))]
你的新X数据帧看起来如下所示(这次没有B列):
> X
A C
1 1 5
2 2 6
grep的美妙之处在于您可以指定多个匹配正则表达式的列。如果X有五列(A,B,C,D,E):
> X<-data.frame(A=c(1,2),B=c(3,4),C=c(5,6),D=c(7,8),E=c(9,10))
> X
A B C D E
1 1 3 5 7 9
2 2 4 6 8 10
去掉B列和D列:
> X<-X[,-grep("B|D",colnames(X))]
> X
A C E
1 1 5 9
2 2 6 10
编辑:考虑到Matthew Lundberg在下面的评论中提出的grepl建议:
> X<-data.frame(A=c(1,2),B=c(3,4),C=c(5,6),D=c(7,8),E=c(9,10))
> X
A B C D E
1 1 3 5 7 9
2 2 4 6 8 10
> X<-X[,!grepl("B|D",colnames(X))]
> X
A C E
1 1 5 9
2 2 6 10
如果我试图删除一个不存在的列,什么都不会发生:
> X<-X[,!grepl("G",colnames(X))]
> X
A C E
1 1 5 9
2 2 6 10