鉴于俺不想使用列表序号的方式删除行列,根据以下两个网站找到了根据行列名删除的方法(R语言):
https://liuyang0681.github.io/2019/04/28/R-按照行名或列名删除对应的行列/
https://stackoverflow.com/questions/5234117/how-to-drop-columns-by-name-in-a-data-frame
①
data[ , !colnames(data) %in% c("b","d")]
!函数比which好用,因为which如果选中不存在的行列名,将删除所有内容
②
X[,-grep("B",colnames(X))]
X[,-grep("B|D",colnames(X))]
X[,!grepl("B|D",colnames(X))]
grepl与grep的区别在于:X[,-grep("B",colnames(X))]
如果没有列名包含B
,则将不返回任何列,而不是根据需要返回所有列。考虑X <- iris
一个例子。这是将负索引与计算值一起使用的问题。考虑grepl
代替。 –马修·伦德伯格 ( Matthew Lundberg)
③
subset(df, select=-c(z,u)) # 不要用带引号的列名 !!!!
subset(df, select=c(x,y))
④
dplyr::select(df2, -c(x, y))
·data[ , !colnames(data) %in% c("b","d")]
解释:!函数比which好用,因为which如果选中不存在的行列名,将删除所有内容
·subset( df, select=-c(z,u) )
解释:当选取的是中文列名,这个方法不好用
·dplyr::select( df2, -c(x, y) )
解释:有效解决了subset函数无法选取删除中文列名的问题,例如:x<-dplyr::select(x,-c('缺陷名称','包装后成品补偿重量'))
·X[,!grepl("B|D",colnames(X))]
解释:这个很强大,grepl比grep好用,参考文献给出很好的解释
更新:https://blog.csdn.net/ofoliao/article/details/106593035 给出了很好的补充,ofoliao大佬很赞!
无论行列,可以找出对应索引或构造相同长度TRUE/FALSE的向量,把不需要的行/列删除
#index#
-which(colnames(df) %in% c("a","b"))
-grep("a|b",colnames(df)
#T/F vector#
!colnames(df) %in% c("a","b")
!grepl("a|b", colnames(df))
另外给出ofoliao大佬删除数据集中包含缺失数据NA的行的解释
https://blog.csdn.net/ofoliao/article/details/105914609
https://stackoverflow.com/questions/4862178/remove-rows-with-all-or-some-nas-missing-values-in-data-frame
上帝在祂的独生子耶稣基督里,并为了祂,将得儿子的名分的恩典,赐给一切称义的人(弗1:5);他们由此而被归入上帝的子民之列,得享上帝儿女的自由和特权(加4:4-5;罗8:17;约1:12);有祂的名字写在他们身上(耶14:9;林后6:18;启3:12);领受那赐人儿子名分的圣灵(罗8:15);可以坦然无惧地来到施恩宝座前(弗3:12;罗5:2);得以呼叫阿爸,父(加4:6);并蒙受祂如父一般的怜恤(诗103:13),保护(箴14:26),供给(太6:30,32;彼前5:7),管教(来12:6);永不被撇弃(哀3:31),且受印记,等候得赎的日子来到(弗4:30),并承受应许(来6:12),为上帝永远救恩的后嗣(彼前1:3,4;来1:14)。——《威斯敏斯德信条·论得儿子的名分》感恩❤
参考文献:
R-按照行名或列名删除对应的行列 | 暗之洋光
https://liuyang0681.github.io/2019/04/28/R-%E6%8C%89%E7%85%A7%E8%A1%8C%E5%90%8D%E6%88%96%E5%88%97%E5%90%8D%E5%88%A0%E9%99%A4%E5%AF%B9%E5%BA%94%E7%9A%84%E8%A1%8C%E5%88%97/